二叉树遍历出了点问题,求指点
创建二叉树用递归是没问题了,遍历递归错哪了?问题出在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);
}
应该使用指向指针的指针,而且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;
}
是因为没用二重指针吗? 果然是没用二重指针的原因,测试了一下知道原来是创建二叉树时候出的岔子
void main()
{
tree *t;
t=creat(t);
printf("%c\n",t->a);
printf("%c\n",t->l);
printf("%c\n",t->r);
}
自己找到答案了,小甲鱼老师视频里一带而过,二重指针的用法,找到了篇帖子
http://blog.csdn.net/sdfgh2046/article/details/5647913 漠水 发表于 2014-11-23 13:12
自己找到答案了,小甲鱼老师视频里一带而过,二重指针的用法,找到了篇帖子
http://blog.csdn.net/sdfgh20 ...
如果看到这个帖子第一个回复,那我就直接给分了 有qq吗,加我qq聊聊 85183299
页:
[1]