题目链接:https://www.patest.cn/contests/gplt/L2-006
参考:https://www.liuchuo.net/archives/2100
#include<bits/stdc++.h>
const int maxn =100100;
using namespace std;
vector<int> in,post,level(maxn,-1);
void pre(int root,int st,int en,int index){
if(st>en)return;
int i=st;
while(i<en&&in[i]!=post[root])i++;
level[index]=post[root];
pre(root-1-en+i,st,i-1,index*2+1);
pre(root-1,i+1,en,index*2+2);
}
int main(){
int n;
scanf("%d",&n);
post.resize(n+1);
in.resize(n+1);
for(int i=0;i<n;i++)scanf("%d",&post[i]);
for(int i=0;i<n;i++)scanf("%d",&in[i]);
//cout<<"----"<<endl;
pre(n-1,0,n-1,0);
int cnt=0;
for(int i=0;i<level.size();i++){
if(level[i]!=-1){
if(cnt)printf(" ");
printf("%d",level[i]);
cnt++;
}
}
printf("\n");
return 0;
}