Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Sample
Input
abc,de,g,f,
Output
cbegdfa
cgefdba
Hint
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
char pre[55];
int cnt=0;
typedef struct node
{
char data;
node *l,*r;
}Tree;
//根据先序遍历建立二叉树
Tree* buildtree()
{
Tree *root;
if(pre[cnt]==',')
{
root=NULL;
cnt++;
}
else
{
root = new Tree;
root->data=pre[cnt++];
root->l=buildtree();
root->r=buildtree();
}
return root;
}
void mid(Tree *root)
{
if(root)
{
mid(root->l);
cout<<root->data;
mid(root->r);
}
}
void post(Tree *root)
{
if(root)
{
post(root->l);
post(root->r);
cout<<root->data;
}
}
int main()
{
ios::sync_with_stdio(false);
while(cin>>pre)
{
cnt=0;
Tree *root;
root=buildtree();
mid(root);
cout<<endl;
post(root);
cout<<endl;
}
return 0;
}