回 帖 发 新 帖 刷新版面

主题:二叉树遍历问题

我的二叉树在输出时只能输出一个根节点,请高手指点!!!
#include "stdio.h"
#include "stdlib.h"
struct tree
{
    int data;
    tree *left,*right;
};
tree *creat(tree *t)
{
    int a;
    scanf("%d",&a);
    if(a==-2)
        t=NULL;
    else
    {
        t=(tree *)malloc(sizeof(tree));
        t->data=a;
        printf("a ");
        creat(t->left);
        printf("b ");
        creat(t->right);

    }

 return t;
}    

void display(tree *t)
{
    
    if(t!=NULL)
    {
        printf("%d ",t->data);
        display(t->left);
        display(t->right);
    }

}
void main()
{
    tree *root;
    root=creat(root);

    display(root);
}
输入 2 3 -2 5 -2 -2 -2 
只能输入一个2 然后报错

回复列表 (共8个回复)

沙发

请参考http://www.programfan.com/club/showbbs.asp?id=166939

板凳

#include "stdio.h"
#include "stdlib.h"
struct tree
{
    int data;
    tree *left,*right;
};
tree *creat()
{
    tree *t;

    int a;
    scanf("%d",&a);
    if(a==-2)
        t=NULL;
    else
    {
        t=(tree *)malloc(sizeof(tree));
        t->data=a;
        printf("a ");
        t->left=creat();
        printf("b ");
        t->right=creat();

    }

 return t;
}    

void display(tree *t)
{
    
    if(t!=NULL)
    {
        printf("%d ",t->data);
        display(t->left);
        display(t->right);
    }

}
void main()
{
    tree *root;
    root=creat();

    display(root);
}
帮你改了下..呵呵

3 楼

谢谢
已经ok了
我的函数不知道是创建有问题,还是返回有问题

4 楼

看了半天,没看懂
是不是就改了两处:tree *creat(tree *t)改为tree *creat()

 root=creat(root);改为 root=creat();

5 楼

tree *creat()
    t->left=creat();
       
        t->right=creat();
root=creat();
就这几个地方

6 楼

你输出结点的语句有问题

7 楼

是创建有问题。 creat(t->left); creat(t->right);都是Tree *类型函数,不可能单纯地调用。

8 楼

嗯,改的地方都是很关键的知识点,调用以及参数匹配,指针传递的问题。

我来回复

您尚未登录,请登录后再回复。点此登录或注册