题目:https://www.patest.cn/contests/gplt/L2-011
。。。
#include <bits/stdc++.h>
using namespace std;
int pre[70],in[70],level[100005],n;
void post(int l,int r,int root,int id){
if(l>r) return;
int i=l;
while(i<=r&&in[i]!=pre[root]) i++;
level[id]=pre[root];
post(l,i-1,root+1,id*2+2);
post(i+1,r,root+i-l+1,id*2+1);
}
int main() {
cin>>n;
for(int i=0;i<n;i++)
cin>>in[i];
for(int i=0;i<n;i++)
cin>>pre[i];
fill(level,level+100005,-1); //不一定每个节点都有两棵子树(非满二叉树)
post(0,n-1,0,0);
int cnt=0;
for(int i=0;i<100005;i++){
if(level[i]!=-1){
cnt++;
cout<<level[i];
if(cnt==n) cout<<endl;
else cout<<" ";
}
}
return 0;
}