Inorder Successor in BST II

medium tree bst binary tree

Problem

Each BST node has a parent pointer. Given a node, return its inorder successor (or null).

Inputnode = (val=2 in BST [1,2,3])
Output3
Two cases: right-subtree-leftmost, else climb until we're our parent's left child.

def inorder_successor(node):
    if not node: return None
    if node.right:
        cur = node.right
        while cur.left: cur = cur.left
        return cur
    while node.parent and node.parent.right is node:
        node = node.parent
    return node.parent
function inorderSuccessor(node) {
  if (!node) return null;
  if (node.right) {
    let cur = node.right;
    while (cur.left) cur = cur.left;
    return cur;
  }
  while (node.parent && node.parent.right === node) node = node.parent;
  return node.parent;
}
class Solution {
    public Node inorderSuccessor(Node node) {
        if (node == null) return null;
        if (node.right != null) {
            Node cur = node.right;
            while (cur.left != null) cur = cur.left;
            return cur;
        }
        while (node.parent != null && node.parent.right == node) node = node.parent;
        return node.parent;
    }
}
Node* inorderSuccessor(Node* node) {
    if (!node) return nullptr;
    if (node->right) {
        Node* cur = node->right;
        while (cur->left) cur = cur->left;
        return cur;
    }
    while (node->parent && node->parent->right == node) node = node->parent;
    return node->parent;
}
Time: O(h) Space: O(1)