题目只是要求输出后序遍历,这样就省事多了。无需建树,用数组来表示每个节点的字母,递归输出后序遍历即可。
/*************************************************************************
> File Name: Tree Recovery UVA - 536
> Author: Mrhanice
> Mail: 690697134@qq.com
> Created Time: 20170312
> link : https://vjudge.net/problem/UVA-536
************************************************************************/
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=30;
char in_order[maxn],post_order[maxn],pre_order[maxn];
void post_trva(char *pre, char *in ,int length)
{
if(length<=0) return ;
char x = *pre;
int i=0;
for(;i<length;i++)
{
if(in[i]==x)
break;
}
post_trva(pre+1,in,i);
post_trva(pre+i+1,in+i+1,length-i-1);
printf("%c",x);
}
int main()
{
while(scanf("%s",pre_order)!=EOF)
{
scanf("%s",in_order);
int len=strlen(pre_order);
post_trva(pre_order,in_order,len);
printf("\n");
}
return 0;
}