二叉树建树问题_如何输入节点
非常尴尬的一件事情,数据结构机考过程中发现自己建树的程序无法终止输入,如此基础的一个问题竟然到考试还有漏洞,之前一直感觉建树的代码很容易都没有好好自己写输入输出跑一边。
我认为这个问题也有人会遇到还是发出来吧。
可以从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:
" );
CreatBiTree(T);
/**********************************/
printf("The Pretravel is:
");
PreTravel(T);
printf("
");
/**********************************/
printf("The Midtravel is:
");
MidTravel(T);
printf("
");
/**********************************/
printf("The PostTravel is:
");
PostTravel(T);
printf("
");
}
