使用c语言的BST中指针不兼容的问题

问题描述 投票:0回答:1

我正在研究 BST

    
    typedef struct Node
    {
        double key;
        struct Node* left;
        struct Node* right;
    } Node;

    Node *newNode(double key)
    {
        Node *node = (Node*) malloc(sizeof(Node));
        node->left = NULL;
        node->right = NULL;
        node->key = key;
    
        return node;
    }

    Node *insertNode(Node *root, Node *new_Node)
    {
    
        if(root == NULL) {
            return new_Node;
        }

        if(root->key == new_Node->key) {
            printf("Duplicate node %d\n", root->key);
            return root;
        }

        if(root->key < new_Node->key) {
            root->right = insertNode(root->right, new_Node);
        } 
        else {
            root->left = insertNode(root->left, new_Node);
        }

        return root;

    }

我收到以下错误

    warning: passing argument 1 of 'insertNode' from incompatible pointer type [-Wincompatible-pointer-types]
         root->right = insertNode(root->right, new_Node);

不知道我做错了什么。请帮忙!

c pointers binary-search-tree
1个回答
0
投票

你可能没有正确初始化根节点:

int main() {
    Node *root = NULL;
    insertNode(root, newNode(42));
}

main()
中,
root
变量仍然是
NULL
,因为参数在C中按值传递。它也会泄漏
newNode(42)
。相反,你需要做:

int main() {
    Node *root = insertNode(NULL, newNode(42));
    insertNode(root, newNode(41));
}

如果你想替换

root
节点,那么你需要更改接口以传入
Node **root
代替(提示:当你想要一个平衡树时你会这样做)。

更喜欢将变量而不是类型传递给

sizeof
,不要转换
void *
并检查
malloc()
是否成功,即:

Node *node = malloc(sizeof *node);
if(!node)
   return NULL; // let caller deal with it
© www.soinside.com 2019 - 2024. All rights reserved.