Welcome to Subscribe On Youtube
285. Inorder Successor in BST
Description
Given the root
of a binary search tree and a node p
in it, return the in-order successor of that node in the BST. If the given node has no in-order successor in the tree, return null
.
The successor of a node p
is the node with the smallest key greater than p.val
.
Example 1:
Input: root = [2,1,3], p = 1 Output: 2 Explanation: 1's in-order successor node is 2. Note that both p and the return value is of TreeNode type.
Example 2:
Input: root = [5,3,6,2,4,null,null,1], p = 6
Output: null
Explanation: There is no in-order successor of the current node, so the answer is null
.
Constraints:
- The number of nodes in the tree is in the range
[1, 104]
. -105 <= Node.val <= 105
- All Nodes will have unique values.
Solutions
-
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode inorderSuccessor(TreeNode root, TreeNode p) { TreeNode ans = null; while (root != null) { if (root.val > p.val) { ans = root; root = root.left; } else { root = root.right; } } return ans; } }
-
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { TreeNode* ans = nullptr; while (root) { if (root->val > p->val) { ans = root; root = root->left; } else { root = root->right; } } return ans; } };
-
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def inorderSuccessor(self, root: TreeNode, p: TreeNode) -> Optional[TreeNode]: ans = None while root: if root.val > p.val: ans = root root = root.left else: root = root.right return ans
-
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func inorderSuccessor(root *TreeNode, p *TreeNode) (ans *TreeNode) { for root != nil { if root.Val > p.Val { ans = root root = root.Left } else { root = root.Right } } return }
-
/** * Definition for a binary tree node. * class TreeNode { * val: number * left: TreeNode | null * right: TreeNode | null * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } * } */ function inorderSuccessor(root: TreeNode | null, p: TreeNode | null): TreeNode | null { let ans: TreeNode | null = null; while (root) { if (root.val > p.val) { ans = root; root = root.left; } else { root = root.right; } } return ans; }
-
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @param {TreeNode} p * @return {TreeNode} */ var inorderSuccessor = function (root, p) { let ans = null; while (root) { if (root.val > p.val) { ans = root; root = root.left; } else { root = root.right; } } return ans; };