Given a node
in a binary search tree, find the in-order successor of that node in the BST.
If that node has no in-order successor, return null
.
The successor of a node
is the node with the smallest key greater than node.val
.
You will have direct access to the node but not to the root of the tree. Each node will have a reference to its parent node. Below is the definition for Node
:
class Node { public int val; public Node left; public Node right; public Node parent; }
Follow up:
Could you solve it without looking up any of the node's values?
Example 1:
Input: tree = [2,1,3], node = 1 Output: 2 Explanation: 1's in-order successor node is 2. Note that both the node and the return value is of Node type.
思路:如果有右邊節點,那麼往右走,右邊的最左邊node就是答案。如果沒有右邊的node,那麼向上找到第一個左拐的node,就是答案;
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node parent;
};
*/
class Solution {
public Node inorderSuccessor(Node node) {
if(node == null) {
return null;
}
if(node.right != null) {
node = node.right;
while(node != null && node.left != null) {
node = node.left;
}
return node;
} else {
while(node.parent != null && node.parent.left != node) {
node = node.parent;
}
return node.parent;
}
}
}