#include<bits/stdc++.h>
using namespace std;
int n,cnt;
vector<int>in,post,level(1000000,-1);
void levelorder(int root,int start,int end,int index)
{
if(start>end) return ;
int i=start;
while(i<=end&&post[root]!=in[i]) i++;
level[index]=post[root];
levelorder(root-1-end+i,start,i-1,2*index+1);
levelorder(root-1,i+1,end,2*index+2);
}
int main()
{
cin>>n;
in.resize(n); post.resize(n);
for(int i=0;i<n;i++) cin>>post[i];
for(int i=0;i<n;i++) cin>>in[i];
levelorder(n-1,0,n-1,0);
for(int i=0;i<1000000;i++)
{
if(level[i]==-1) continue;
cnt++;
if(i) cout<<" ";
cout<<level[i];
if(cnt==n) break;
}
}
L2-006 树的遍历 (25分)【极简代码】
最新推荐文章于 2021-03-16 19:36:24 发布