Я хочу рекурсивно и эффективно искать предшественника в бинарном дереве поиска без использования родительского указателя.
Я даю корень дерева и определенные данные (которые могут содержаться или не содержаться в BST) в качестве параметра функции.
У меня проблемы, потому что, если BST не содержит данных, функция должна выдавать на выходе максимальное значение, меньшее, чем оно.
Node *recPredecessor(Node *root, int data, Node *pred){
if(root->key > data){
return recPredecessor(root->left, data, pred);
}
if(root->key < data){
return recPredecessor(root->right, data, root);
}
if((root == NULL) || (root->key == data)){
if(root == NULL){
return pred;
}
if(root->key == data){
if(root->left != NULL){
return bstRecGetMax(root->left); //this func return node with Max key
}else{
return pred;
}
}
}
}