非常尴尬的一件事情,数据结构机考过程中发现自己建树的程序无法终止输入,如此基础的一个问题竟然到考试还有漏洞,之前一直感觉建树的代码很容易都没有好好自己写输入输出跑一边。
我认为这个问题也有人会遇到还是发出来吧。
可以从if(ch == ’ . ')看出输入 . 是把T置为空结束输入,但是问题是只输入一个是不能结束的,是因为二叉树不是线性的他有leftchild和rightchild,把左孩子有孩子以及他们的子节点置空才可以。
最后是代码
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreatBiTree(BiTree &T)
{//前序法创建二叉树
char ch;
scanf("%c",&ch);
if(ch=='.')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
exit(1);
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
void PreTravel(BiTree &T)
{//前序遍历
if(T)
{
printf("%c",T->data);
PreTravel(T->lchild);
PreTravel(T->rchild);
}
}
void MidTravel(BiTree &T)
{//中序遍历
if(T)
{
MidTravel(T->lchild);
printf("%c",T->data);
MidTravel(T->rchild);
}
}
void PostTravel(BiTree &T)
{//后序遍历
if(T)
{
PostTravel(T->lchild);
PostTravel(T->rchild);
printf("%c",T->data);
}
}
int main()
{
BiTree T;
printf("please input the bitree:\n" );
CreatBiTree(T);
/**********************************/
printf("The Pretravel is:\n");
PreTravel(T);
printf("\n");
/**********************************/
printf("The Midtravel is:\n");
MidTravel(T);
printf("\n");
/**********************************/
printf("The PostTravel is:\n");
PostTravel(T);
printf("\n");
}