c语言构造树及树的三种遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<>
#include<>
#include <>
#define error 0
#define ok 1
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(error);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return ok;
}
void PreOrderBiTree(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderBiTree(T->lchild);
PreOrderBiTree(T->rchild);
}
}
void InOrderBiTree(BiTree T)
{
if(T)
{
InOrderBiTree(T->lchild); //中序遍历左子树
printf("%c",T->data); //访问结点
InOrderBiTree(T->rchild); //中序遍历右子树}
}
void PostOrderBiTree(BiTree T)
{
if(T)
{
PostOrderBiTree(T->lchild);
PostOrderBiTree(T->rchild);
printf("%c",T->data);
}
}
main()
{
int i;
BiTree T;
printf("\t请输入树的各元素:\n\t");
CreateBiTree(T);
do
{
printf(" /*****************************/\n");
printf("\t1键:先序输出; \n\t2键:中序输出;\n\t3键:后序输出!\n\t0键:退出程序!\n");
printf("\t请输入你的选择:\n\t");
scanf("%d",&i);
switch(i)
{
case 1:printf("\n\t你选择的是先序输出!! \n");
printf("\n\t输出结果为:\n");
printf("\t");
PreOrderBiTree(T);break;
case 2:printf("\n\t你选择的是中序输出!! \n");
printf("\n\t输出结果为:\n");
printf("\t");
InOrderBiTree(T);break;
case 3:printf("\n\t你选择的是后序输出!! \n");
printf("\n\t输出结果为:\n");
printf("\t");
PostOrderBiTree(T);break;
}
printf("\n");
}while(i!=0);
}