#include<stdio.h>
#include<stdlib.h>
typedef char TElemType;
typedef int status;
typedef struct BiTNode
{
TElemType data;//树的节点的值
struct BiTNode *lchild,*rchild;//定义树的左孩子指针和右孩子指针
}BiTNode,*BiTree;
//先序创建二叉树
status CreateBiTree(BiTree &T)
{
TElemType ch;
scanf("%c",&ch);//输入节点值
if(ch=='#')//#符号代表该树为空节点
{
T=NULL;
return 0;
}
else
{
if(!(T=(BiTree)malloc(sizeof(BiTNode))))//节点空间
exit(-1);
T->data=ch;
CreateBiTree(T->lchild);//递归创建左孩子节点树
CreateBiTree(T->rchild);//递归创建右孩子节点树
}
return 1;
}
//先序访问二叉树
status PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);//递归先序访问该树的左孩子
PreOrderTraverse(T->rchild);//递归先序访问该树的右孩子
}
return 1;
}
//中序访问二叉树
status InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);//递归中序访问该树的左孩子
printf("%c",T->data);
InOrderTraverse(T->rchild);//递归中序访问该树的左孩子
}
return 1;
}
//后续访问二叉树
status PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);//递归后序访问该树的左孩子
PostOrderTraverse(T->rchild);//递归后序访问该树的左孩子
printf("%c",T->data);
}
return 1;
}
int main()
{
BiTree T;
printf("请正确输入二叉树,空子树用#代替\n");
CreateBiTree(T);//先序创建二叉树
printf("先序访问为: ");
PreOrderTraverse(T);//先序访问二叉树
printf("\n中序访问为:");
InOrderTraverse(T);//中序访问二叉树
printf("\n后序访问为:");
PostOrderTraverse(T);//后序访问二叉树
printf("\n");
return 0;
}