C 有人能找出为什么树没有链接吗

C 有人能找出为什么树没有链接吗,c,C,我正在编写一个代码来创建一个二叉树,但出现了一些问题,我试图调试,但找不到任何人可以找到它 我试过的代码如下 头文件是 #include< stdio.h> #include< stdlib.h> 其他声明 *head,*p=NULL; int count=0; create()函数为 void create(int m) { if(count==0) { p=(struct node *)malloc(sizeof(struct no

我正在编写一个代码来创建一个二叉树,但出现了一些问题,我试图调试,但找不到任何人可以找到它

我试过的代码如下

头文件是

#include< stdio.h>
#include< stdlib.h>
其他声明

*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;
}
主要功能是

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;
}
intmain()
{
int n,i,m;
scanf(“%d”和“&n”);
对于(i=0;i0){
而(1){
如果(m数据)
p=p->左;
其他的
p=p->右;
if(p==NULL)
{
创建(m);
打破
}
}
}
p=水头;
}
printf(“%d”,p->left->data)//打印数据
返回0;
}

想想,当i=1时,计数也是1

if(m<p->data)
{
    p=p->left;
}
让我们看看create(m)中发生了什么。现在在create()中,其他部分将起作用

else
{
    p=(struct node *)malloc(sizeof(struct node));
    p->data=m;
    p->left=NULL;
    p->right=NULL;
}
也可以。现在你有一个孩子的头。该子项的引用位于p中。对吗?但你犯的错误是

p=head;
也就是说,你所做的一切都消失了。现在还没有提到头上的孩子。p是保持头部的参考。请参见,head->lefthead->right始终为NULL您在p中保留的内容。因此,您必须创建一个节点,在该节点中找到一个NULL,而不是p。它不会给你任何结果

希望它能帮助你。:)