漠水 发表于 2014-11-23 11:50:14

二叉树遍历出了点问题,求指点

创建二叉树用递归是没问题了,遍历递归错哪了?问题出在bianli(t)上#include<stdio.h>

#include<stdlib.h>
typedef struct tree
{
char a;
struct tree *l,*r;               //左右孩子
}tree;

tree *creat(tree *t) //设置根为t的二叉树
{
tree *p;
char c;
p=(tree *)malloc(sizeof(tree));
t=p;
scanf("%c",&c);
if(' '==c)
{ p=NULL;

}

else
{
p->a=c;
creat(p->l);
creat(p->r);
}
return t;
}

void bianli(tree *t)
{
if(t==NULL)printf("_"); //用下标表示空
else
{
printf("%c\n",t->a);
bianli(t->l);
bianli(t->r);
}
}


void main()
{
tree *t;
t=creat(t);
bianli(t);


}

风之残月 发表于 2014-11-23 11:50:15

应该使用指向指针的指针,而且creat函数里p = NULL 和 p=(tree *)malloc(sizeof(tree)); 有点问题,我改了下,使用 t = creat(&t);
tree *creat(tree **t) //设置根为t的二叉树
{
        tree *p;
        char c;

        fflush(stdin);
        scanf("%c",&c);
        if(' '==c)
        {
                *t = NULL;
        }
       
        else
        {
                p = (tree *)malloc(sizeof(tree));
                *t=p;
                p->a=c;
                printf("请输入 %c 结点的左子树结点: ", p->a);
                creat(&p->l);
                printf("请输入 %c 结点的右子树结点: ", p->a);
                creat(&p->r);
        }
        return *t;
}

漠水 发表于 2014-11-23 11:58:29

是因为没用二重指针吗?

漠水 发表于 2014-11-23 12:25:07

果然是没用二重指针的原因,测试了一下知道原来是创建二叉树时候出的岔子
void main()

{

tree *t;

t=creat(t);
printf("%c\n",t->a);
printf("%c\n",t->l);
printf("%c\n",t->r);





}

漠水 发表于 2014-11-23 13:12:09

自己找到答案了,小甲鱼老师视频里一带而过,二重指针的用法,找到了篇帖子
http://blog.csdn.net/sdfgh2046/article/details/5647913

漠水 发表于 2014-11-23 13:17:25

漠水 发表于 2014-11-23 13:12
自己找到答案了,小甲鱼老师视频里一带而过,二重指针的用法,找到了篇帖子
http://blog.csdn.net/sdfgh20 ...

如果看到这个帖子第一个回复,那我就直接给分了

帅哥星 发表于 2014-12-2 20:00:50

ggy101600 发表于 2014-12-14 18:36:52

有qq吗,加我qq聊聊 85183299
页: [1]
查看完整版本: 二叉树遍历出了点问题,求指点