#include<iostream>
#include<stdlib.h>
using namespace std;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;//节点数据
struct BiTNode* lchild;//左孩子
struct BiTNode* rchild;//右孩子
} BiTNode,*BiTree;
BiTree CreateBiTree()
{
char ch;//存储结点的值
BiTree T;
cin>>ch;
if(ch=='#')//输入'#',也可以用其他代替
T=NULL;
else
{
T=(BiTNode*)malloc(sizeof(BiTNode));//生成结点
T->data=ch;//将输入的字符存入结点
T->lchild=CreateBiTree();//递归建立左子树
T->rchild=CreateBiTree();//递归建立右子树
}
return T;
}
void PreOrderTraverse(BiTree T)//先序遍历
{
if(T!=NULL)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)//中序遍历
{
if(T!=NULL)
{
InOrderTraverse(T->lchild);
cout<<T->data;
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)//后序遍历
{
if(T!=NULL)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data;
}
}
int main()
{
BiTree T;
cout<<"输入扩展后的二叉树的先序遍历序列:";
T=CreateBiTree();
cout<<"先序遍历序列为:";
PreOrderTraverse(T);
cout<<endl;
cout<<"中序遍历序列为:";
InOrderTraverse(T);
cout<<endl;
cout<<"后序遍历序列为:";
PostOrderTraverse(T);
cout<<endl;
return 0;
}