我试图做一个二叉搜索树,但是当我尝试插入任何值,或者更确切地说,当一个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;
};
所以,问题不是出在我这里贴的代码,整个代码可以发现here如果我只是重写整个问题,只是在这里张贴整个代码请在通信中如此安排,尽量纠正。
找到我的答案 当我真的安全地过去了create
之后,我找到了最后一个弄错了我的程序的错误。这是*i++;
。显然,++不能很好地处理所指向的值。在我将其重写为*i=*i+1;
后终于有效,所以我要感谢所有帮助过我的人,并提出了最后一个问题:*i++;
和*i=i+1;
之间有什么区别?
当你说“一个NULL指针被传递给函数”,你的意思是'leaf == NULL'或'* leaf == NULL'? – interjay
你的第一个'if'条件不应该是if(* leaf == NULL)'吗? – noMAD
@netcoder是不是该做什么?你需要与'struct node'关联的空间,对吧? – noMAD