我正在研究 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);
不知道我做错了什么。请帮忙!
你可能没有正确初始化根节点:
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