gpt4 book ai didi

c - 二叉搜索树插入错误

转载 作者:行者123 更新时间:2023-11-30 14:22:15 25 4
gpt4 key购买 nike

我正在尝试创建一个二叉搜索树,但是当我尝试插入任何值时,或者更准确地说,当将 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;

最佳答案

我完全按照原样获取了您的结构定义和插入函数,并将您的其他代码转储到 main() 中。功能如下:

int main()
{
struct node *root;
int i, c = 10;
root=0;
for(i=0;i<c;i++){
create(i, &root);
}
return 0;
}

看起来效果很好。我还尝试了许多不同的有序元素:

int f[] = {6, 1, 9, 2, 0, 18, 2, -8, 10000, 5};

再说一次,没有崩溃,我得到了正确的顺序......

您是否确认 c ,您在以下条件下使用:i<cf[]元素数量?您可以删除 c只需使用:sizeof(f)/sizeof(int) .

什么输入导致该函数失败?它失败的确切错误消息是什么?

当你“行走”你的树时,你在打印值之前检查过 NULL 吗?

<小时/>

在您发布整个代码后,我可以看到它在这里崩溃了:

int *pole, i, count=3;
pole[0]=25; <----

您没有给极点任何内存,因此您正在引用一个未初始化的指针。

pole = malloc(3 * sizeof(int));

解决了这个问题,但还有更多。

接下来你会死在这里:

void getorder(struct node *leaf, int *f, int *i){
if(leaf->left!=NULL){
getorder(leaf->left, f, i);
}
f[*i]=leaf->val; <-- this will kill you

因为你又不给j任何内存:

int *j;
...
*j=0;
getorder(root, f, j);

关于c - 二叉搜索树插入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com