Find inorder successor and inorder predecessor in a BST

June 28, 2022 · 1 min read

https://practice.geeksforgeeks.org/problems/predecessor-and-successor/1

void findPreSuc(Node* root, Node*& pre, Node*& suc, int key) {
    if (root == nullptr) return;

    if (root->key > key) {
        suc = root;
        findPreSuc(root->left, pre, suc, key);
    } else if (root->key < key) {
        pre = root;
        findPreSuc(root->right, pre, suc, key);
    } else {
        if (root->left != nullptr) {
            Node *tmp = root->left;
            while (tmp->right != nullptr) tmp = tmp->right;
            pre = tmp;
        }
        if (root->right != nullptr) {
            Node *tmp = root->right;
            while (tmp->left != nullptr) tmp = tmp->left;
            suc = tmp;
        }
    }
}
Find min and max value in a BST
Deletion of a node in a BST