题目描述
已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及先序遍历结果,要求输出其后序遍历结果。
输入
输入数据占2行,其中第一行表示中序遍历结果,第二行为先序遍历结果。
输出
对测试数据,输出后序遍历结果。
样例输入
BFDAEGC ABDFCEG
样例输出
FDBGECA
前序遍历ABDFCEG加粗的A即为根节点,在中序遍历中BFDAEGC,这样即可确认节点A的左子树的节点有BFD,右子树的节点有EGC,根据前序遍历的性质左子树的根节点为B,右子树的根节点为C
#include<bits/stdc++.h>
#define ll long long
//#define int ll
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
#define endl '\n'
#define N 100005
const int inf=0x3f3f3f3f;
const double pi=acos(-1.0);
using namespace std;
void h(string z,string x)
{
if(!z.size()) return;
char c;
int k;
c=x[0];
k=z.find(c);//找到c的索引
h(z.substr(0,k),x.substr(1,k));//z.substr(0,k):从索引为0的元素开始截取k位
h(z.substr(k+1),x.substr(k+1));//z.substr(k+1):从索引为5的元素开始截取到末尾
cout<<c;
}
signed main()
{
string z,x;
cin>>z>>x;
h(z,x);
return 0;
}