#c #binary-search-tree
#c #двоичный-поиск-дерево
Вопрос:
1 — Прочитать последовательность из n чисел и вставить ее в двоичное дерево поиска. (Я выполнил эту часть без каких-либо проблем.)
Node *insert(Node **root, int k)
{
if(*root == NULL)
{
Node *newNode = (Node *)malloc(sizeof(Node ));
if(newNode == NULL)
return NULL;
newNode->key = k;
newNode->left = NULL;
newNode->right = NULL;
(*root) = newNode;
return newNode;
}
if(k < (*root)->key)
return insert(amp;((*root)->left),k);
else
return insert((amp;(*root)->right),k);
}
2 — Прочитать число и вывести, на каком уровне оно находится. Выведите -1, если ключ отсутствует в дереве.
Эту часть я не знаю, как это сделать, я смог рассчитать только общую высоту дерева.
int height(Node *aNode,int k) {
if (aNode == NULL) {
return -1;
}
int lefth = height(aNode->left,k);
int righth = height(aNode->right,k);
if (lefth > righth) {
return lefth 1;
} else {
return righth 1;
}
}
Пример:
по британскому летнему времени пример
Если заданное число равно 60, я должен напечатать 1
Если заданное число равно 27, я должен напечатать 3
Если заданное число равно 100, я должен вывести -1
Ответ №1:
Вы должны:
- Прекратите обход и вернитесь
0
, когда значение будет найдено. - Возвращает
-1
, когда значение не найдено у обоих дочерних элементов.
int height(Node *aNode,int k) {
if (aNode == NULL) {
return -1;
}
if (aNode->key == k) return 0; /* add this */
int lefth = height(aNode->left,k);
int righth = height(aNode->right,k);
if (lefth == -1 amp;amp; righth == -1) return -1; /* add this */
if (lefth > righth) {
return lefth 1;
} else {
return righth 1;
}
}