Не удалось получить значение указателя узла при возврате его из функции - PullRequest
1 голос
/ 08 апреля 2020

Так что это моя функция поиска в бинарном дереве поиска.

При возврате узла результата в мою функцию вставки переменная в функции вставки не может получить значение, возвращенное функцией поиска.

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

1 Ответ

0 голосов
/ 16 апреля 2020

Я решил это, вернув NULL вместо самого узла

Tree searchPoint(Tree node, int key)
{
    if (!node || (key == node->data)) {
        return NULL;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...