[LeetCode] Inorder Successor in BST
Given a binary search tree and a node in it, find the in-order successor of that node in the BST.
Note: If the given node has no in-order successor in the tree, return null
.
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { 13 if (p == NULL) return NULL; 14 TreeNode *res = NULL; 15 if (p->right != NULL) { 16 res = p->right; 17 while (res->left) res = res->left; 18 return res; 19 } 20 TreeNode *q = root; 21 while (q != NULL && q->val != p->val) { 22 if (q->val > p->val) { 23 res = q; 24 q = q->left; 25 } else { 26 q = q->right; 27 } 28 } 29 return res; 30 } 31 };