Inorder Successor in BST

medium tree bst

Problem

Given the root of a BST and a node p, return the in-order successor — the smallest node greater than p, or null.

Inputroot = [2,1,3], p = 1
Output2
Walk root 2 (> 1, candidate=2), go left to 1 — no further descent. Successor is 2.

def inorder_successor(root, p):
    succ = None
    while root:
        if root.val > p.val:
            succ = root; root = root.left
        else:
            root = root.right
    return succ
function inorderSuccessor(root, p) {
  let succ = null;
  while (root) {
    if (root.val > p.val) { succ = root; root = root.left; }
    else root = root.right;
  }
  return succ;
}
class Solution {
    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
        TreeNode succ = null;
        while (root != null) {
            if (root.val > p.val) { succ = root; root = root.left; }
            else root = root.right;
        }
        return succ;
    }
}
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
    TreeNode* succ = nullptr;
    while (root) {
        if (root->val > p->val) { succ = root; root = root->left; }
        else root = root->right;
    }
    return succ;
}
Time: O(h) Space: O(1)