Так что это моя функция поиска в бинарном дереве поиска.
При возврате узла результата в мою функцию вставки переменная в функции вставки не может получить значение, возвращенное функцией поиска.
typedef struct tree_node {
struct tree_node *left_child;
struct tree_node *right_child;
int data;
int level;
} Node;
typedef Node* Tree;
Tree searchPoint(Tree node, int key)
{
if (node == NULL || key == node->data) {
return node;
}
if (key < node->data) {
return searchPoint(node->left_child, key);
}
if (key > node->data) {
return searchPoint(node->right_child, key);
}
return node;
}
Tree insert(Tree root, int key, Tree head)
{
Tree ptr, newNode;
newNode = (Tree)malloc(sizeof(Node*));
ptr = (Tree)malloc(sizeof(Node*));
if (root == NULL) {
newNode->data = key;
if (head == NULL) {
newNode->level = 1;
}
else {
ptr = searchPoint(head, key);
newNode->level = ptr->level + 1;
}
newNode->left_child = newNode->right_child = NULL;
return newNode;
}
if (key < root->data) {
root->left_child = insert(root->left_child, key, head);
}
else if (key > root->data) {
root->right_child = insert(root->right_child, key, head);
}
return root;
}
Я пытался отлаживать построчно, я отчетливо вижу значение узла при возврате в searchPoint (). Однако, возвращаясь в функцию вставки, переменная ptr получает нулевой указатель.
Не могу понять, кто-нибудь может мне помочь?
Кроме того, основная функция здесь
int main()
{
int n, key;
Tree root = NULL;
Tree head = NULL;
printf("Input the number of integers:\n");
scanf("%d", &n);
printf("Input these integers:\n");
for (int i = 0; i < n; i++)
{
scanf("%d", &key);
root = insert(root, key, head);
if (i == 0) {
head = root;
}
}
print_level(head);
return 0;
}