#include <iostream>
#include<stdlib.h>
#include<stdio.h>
#define MaxSize 100
using namespace std;
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode *Q[MaxSize];
BiTNode *CREATREE()
{ char ch;
int front,rear;
BiTNode *root,*s;
root=NULL;
front=1;
rear=0;
ch=getchar();
while(ch!='#')
{s=NULL;
if(ch!='@')
{s=(BiTNode *)malloc(sizeof(BiTNode));
s->data=ch;s->lchild=NULL;s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1)
root=s;
else
{if(s&&Q[front])
if(rear%2==0)
Q[front]->lchild=s;
else
Q[front]->rchild=s;
if(rear%2==1)
front++;
}
ch=getchar();
}
return root;
}
//xianxu
void PreOrder(BiTNode *t)
{
if(t!=NULL)
{
printf("\t%c\n",t->data);
PreOrder (t->lchild);
PreOrder (t->rchild);
}
}
//zhongxu
void InOrder(BiTNode *t)
{
if(t!=NULL)
{
InOrder(t->lchild);
printf("\t%c\n",t->data);
InOrder(t->rchild);
}
}
//houxu
void PostOrder(BiTNode *t)
{
if(t!=NULL)
{
PostOrder(t->lchild);
PostOrder(t->rchild);
printf("\t%c\n",t->data);
}
}
int main()
{ BiTNode *x;
CREATREE();
printf("先序遍历的结果为\n");
PreOrder(x);
printf("\n");
printf("中序遍历的结果为\n");
InOrder(x);
printf("\n");
printf("后序遍历的结果为\n");
PostOrder(x);
printf("\n");
return 0;
}