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;
}
}
}