关于二叉树的建立和遍历 ,为什么输入之后不输出啊
发布网友
发布时间:2022-05-05 10:31
我来回答
共3个回答
热心网友
时间:2022-06-27 09:18
有两个错误:1.当读入的是空格时,T赋值为空不错,但此时应该返回,而不应该进入下一个判断的else分句,楼主的代码就是进入了if(ch=='#') exit(0);的else分句。2.可以看到主函数中对createbitree的调用需要用一个指针承接返回值,所以根据递归调用的形式不变,在createbitree中调用自身的时候也要承接返回值。根据楼主的代码修改如下:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree creatbitree(BiTree t) //先序建立二叉树
{
BiTree T=t;
char ch;
ch=getchar();
if(ch==' ')
T=NULL;
else {
if(ch=='#')
exit(0);
else{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=ch;
T->lchild = creatbitree(T->lchild);
T->rchild = creatbitree(T->rchild);
}
}
return T;
}
void BiTreeTra(BiTree t) //先序遍历二叉树
{
if(t)
{
printf("%c",t->data);
BiTreeTra(t->lchild);
BiTreeTra(t->rchild);
}
}
void main()
{
BiTree tree;
BiTree T=NULL;
tree=creatbitree(T);
BiTreeTra(tree);
}
热心网友
时间:2022-06-27 09:18
飘过。。。
热心网友
时间:2022-06-27 09:19
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void creatbitree(BiTree &T) //先序建立二叉树
{
char ch;
ch=getchar();
if(ch==' ') T=NULL;
else{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=ch;
creatbitree(T->lchild);
creatbitree(T->rchild);
}
}
void BiTreeTra(BiTree t) //先序遍历二叉树
{
if(t)
{
printf("%c",t->data);
BiTreeTra(t->lchild);
BiTreeTra(t->rchild);
}
}
void main()
{
BiTree tree=NULL;
creatbitree(tree);
BiTreeTra(tree);
}
//放在.cpp文件下,就可以运行