首页 > 解决方案 > 从函数返回时无法接收节点指针的值

问题描述

所以这是我在二叉搜索树中的搜索功能。

将结果节点返回到我的插入函数时,插入函数中的变量无法接收从搜索函数返回的值。

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 收到一个 NULL 指针。

我想不通,谁能帮帮我?

另外,这里的主要功能

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

标签: cpointersbinary-search-treenodesreturn-value

解决方案


我通过返回 NULL 而不是节点本身解决了这个问题

Tree searchPoint(Tree node, int key)
{
    if (!node || (key == node->data)) {
        return NULL;
    }

推荐阅读