我正在编写一个代码来创建一个二叉树,但出现了问题,我试图调试但找不到任何人都可以找到它。
我试过的代码如下:头文件是..
#include< stdio.h>
#include< stdlib.h>
结构是..
struct node {
int data;
struct node *left;
struct node *right;
}
其他声明..
*head,*p=NULL;
int count=0;
create()
功能是......
void create(int m) {
if(count==0)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=m;
p->left=NULL;
p->right=NULL;
head=p;
count++;
}
else {
p=(struct node *)malloc(sizeof(struct node));
p->data=m;
p->left=NULL;
p->right=NULL;
}
}
主要功能是..
int main()
{
int n,i,m;
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%d",&m);
if(i==0) {create(m);}
if(i>0) {
while(1) {
if(m < p->data)
p=p->left;
else
p=p->right;
if(p==NULL)
{
create(m);
break;
}
}
}
p=head;
}
printf("%d",p->left->data); //printing the data
return 0;
}
答案 0 :(得分:0)
想想,当i = 1时,计数也是1,
if(m<p->data)
{
p=p->left;
}
当 p-&gt;左是 null 时会发生什么?现在 p 是一个空指针,对吧?然后你做了这个......
if(p==NULL)
{
create(m);
break;
}
让我们看看 create(m)中发生了什么。现在在 create()其他部分将起作用。
else
{
p=(struct node *)malloc(sizeof(struct node));
p->data=m;
p->left=NULL;
p->right=NULL;
}
也没关系。现在你有一个孩子的头。这个孩子的参考是在 p 。对?但你所犯的错误是,
p=head;
这意味着,你做了什么已经消失了。现在没有头的孩子的参考。 p是保持头部的参考。无论您在 p 中保留什么,请参阅 head-&gt; left 或 head-&gt; right 始终为 NULL 。因此,您必须创建一个节点,在该节点中找到 NULL ,而不是 p 。它没有给你任何结果。
希望,它会对你有所帮助。 :)