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
/** * 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) { // write your code here TreeNode lowestLeftP = null; TreeNode cur = root; if (root == null) { return null; } while (cur != p) { if (cur.val < p.val) { lowestLeftP = cur; cur = cur.right; } else { cur = cur.left; } } TreeNode son = cur.left; TreeNode res = son; while (son != null) { res = son; son = son.right; } if (res != null) { return res; } return lowestLeftP; } }