#include<cstring>
#define maxn 128
typedef struct pa
{
char pan;
struct pa *left,*right;
} panda;
panda *newnode()
{
panda *nnew=new panda;
if(nnew!=NULL) nnew->left=nnew->right=NULL;
return nnew;
}
void addnode(panda *root,char *s)
{
panda *p=root,*queue[maxn]= {p};
int len=strlen(s),low=0,top=1;
bool k=0;
for(int i=1; i<len; i++)
{
p=queue[low%=maxn];
if(k==0)
{
if(p->left==NULL) p->left=newnode();
p->left->pan=s[i],queue[(top%=maxn)++]=p->left;
k=1;
}
else
{
if(p->right==NULL) p->right=newnode();
p->right->pan=s[i],queue[(top%=maxn)++]=p->right;
k=0,low++;
}
}
return ;
}
void PreOrderTraverse(panda *p)
{
if(p->pan=='#') return ;
printf("%c",p->pan);
PreOrderTraverse(p->left);
PreOrderTraverse(p->right);
return ;
}
void InOrderTraverse(panda *p)
{
if(p->pan=='#') return ;
InOrderTraverse(p->left);
printf("%c",p->pan);
InOrderTraverse(p->right);
return ;
}
void PostOrderTraverse(panda *p)
{
if(p->pan=='#') return ;
PostOrderTraverse(p->left);
PostOrderTraverse(p->right);
printf("%c",p->pan);
return ;
}
int main()
{
char s[maxn];
while(scanf("%s",s)==1)
{
panda *root=newnode();
root->pan=s[0];
addnode(root,s);
PreOrderTraverse(root);
putchar('\n');
InOrderTraverse(root);
putchar('\n');
PostOrderTraverse(root);
putchar('\n');
putchar('\n');
}
return 0;
}
/**************************************************************
Language: C++
Result: Accepted
Time:0 ms
Memory:1028 kb
****************************************************************/
样例:1234567########
1245367
4251637
4526731