Преемник элемента в BST является преемником элемента в отсортированном порядке , определяемом обходным порядком. Поиск преемника , когда каждый узел имеет указатель на его родительский узел, представлен в учебнике алгоритмов CLRS (Введение в алгоритмы с помощью MIT ).Найти первый ключ больше, чем X в двоичном дереве поиска
Есть ли способ найти первое значение, которое больше X без parent
в структуре? Как:
typedef struct tree tree;
struct tree{
int value;
tree *left;
tree *right;
};
//Function:
tree *find_first_bigger(tree *t, int x){}
Я пытался работать:
tree *find_first_bigger(tree *t, int x){
if(t == NULL)
return NULL;
if((*t)->value > x)
find_first_bigger((*t)->left, x);
else if((*t)->value < x)
find_first_bigger((*t)->right), x);
else if((*t)->value == x){
if((*t)->right != NULL)
return tree_first_bigger((*t)->right);
else
return tree;
}
}
В этом примере (он использует букву, но там его не проблема), если я пытаюсь искать первый больше, чем N
(он должен вернуться me O
) но он возвращает меня N
.
Я думаю, вы должны положить базовый регистр (если текущий узел равен нулю) для этой рекурсивной функции, чтобы остановить, если в дереве нет большего ключа, чем X. Также вы должны проверить, найден ли ключ и вернуть его. – Wazaaaap
@PlayHardGoPro Не беспокойтесь о downvote, мое решение на 100% правильное. –