我正在尝试创建一个二叉搜索树,但是当我尝试插入任何值时,或者更准确地说,当一个 NULL 指针被传递给函数时,它只是冻结了一会儿然后它崩溃了。这是代码:
void create(int co, struct node **leaf){
if(*leaf==0){
(*leaf)=malloc(sizeof(**leaf));
(*leaf)->val=co;
(*leaf)->left=0;
(*leaf)->right=0;
}
else if(co<(*leaf)->val){
create(co, &(*leaf)->left);
}
else if(co>=(*leaf)->val){
create(co, &(*leaf)->right);
}
}
我不明白为什么会这样。你可以解释吗?
编辑:函数的第一次调用如下所示:
struct node *root;
root=0;
for(i=0;i<c;i++){
create(f[i], &root);
}
其中 c 是数组中元素的数量。这是结构的定义:
struct node{
int val;
struct node *left;
struct node *right;
};
所以问题不在我在这里发布的代码中,整个代码可以在这里找到如果我应该重写整个问题并在这里发布整个代码,请在 commnets 中说,我会尽快纠正。
找到我的答案 在我真正create
安全地通过它之后,我能够找到最后一个搞砸我的程序的错误。它是*i++;
。显然 ++ 不适用于指向的值。在我重写它之后它终于起作用了,所以我要感谢所有帮助我的人,并提出最后一个问题:和*i=*i+1;
之间有什么区别?*i++;
*i=i+1;