Given a binary search tree and a node in it, find the in-order predecessor of that node in the BST.
Example
Example1
Input: root = {2,1,3}, p = 1
Output: null
Example2
Input: root = {2,1}, p = 2
Output: 1
Notice
If the given node has no in-order predecessor in the tree, return null
思路:用stack来模拟inorder traverse,用pre 记录之前的点,遇见p,返回之前的node即可。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the given BST
* @param p: the given node
* @return: the in-order predecessor of the given node in the BST
*/
public TreeNode inorderPredecessor(TreeNode root, TreeNode p) {
if(root == null || p == null) {
return null;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode node = root;
while(node != null) {
stack.push(node);
node = node.left;
}
TreeNode pre = null;
while(!stack.isEmpty()) {
node = stack.pop();
if(node == p) {
return pre;
}
pre = node;
if(node.right != null) {
node = node.right;
while(node != null) {
stack.push(node);
node = node.left;
}
}
}
return null;
}
}