#include <string>
#include <iostream>
using namespace std;
string FindPostOrder( string pre_order, string in_order );
int main()
{
string pre_order, in_order, post_order;
cin >> pre_order >> in_order;
cout << FindPostOrder( pre_order, in_order );
system("pause");
return 0;
}
string FindPostOrder( string pre_order, string in_order )
{
if( pre_order.length() != in_order.length() ) //前序中序元素个数不相等出错
{
cout << "Failed" << endl;
exit(1);
}
if( pre_order.length() == 1 ) //递归终止
{
if( pre_order != in_order ) //一个元素时前序中序不相等
{
cout << "Failed" <<endl;
exit(1);
}
return pre_order;
}
if( pre_order.length() == 0) //前序为空时,后序也为空
return string();
char node = pre_order[0]; //取第一个元素
int index = in_order.find( node ); //找到其在中序中的位置
if( index == string::npos ) //没有找到,则出错
{
cout << "Failed" <<endl;
exit(1);
}
int len = pre_order.length();
//左子树的后序
string left_part = FindPostOrder( pre_order.substr(1,index), in_order.substr(0,index) );
//右子树的后序
string right_part = FindPostOrder( pre_order.substr(1+index, len-index-1), in_order.substr(1+index,len-index-1) );
return left_part+right_part+node; //串联起来
}