任何人都可以找出为什么树没有链接

时间:2015-04-03 13:17:28

标签: c

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

我试过的代码如下:

头文件是..

#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;
}

1 个答案:

答案 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 。它没有给你任何结果。

希望,它会对你有所帮助。 :)