#include<iostream>
#include<vector>
#include<queue>
#include<functional>
using namespace std;
#define MX 40
struct node{
int left, right;
};
int main(){
int n;
cin >> n;
vector<int> mp(MX), v(n + 1);
vector<node>a(MX);
for (int i = 1; i <= n;++i){
int x;
cin >> x;
mp[x] = i;
}
for (int i = 1; i <= n;++i){
cin >> v[i];
}
function<int(int,int,int)> f = [&](int l, int r, int ilst)->int
{
if(l>r)
return -1;
int root = v[l];
int ipos = mp[root];
int lsize = ipos - ilst;
a[root].left=f(l + 1, l + lsize, ilst);
a[root].right= f(l + lsize + 1, r, ipos + 1);
return root;
};
f(1, n, 1);
int ff = 1;
queue<int> q;
q.push(v[1]);
while(!q.empty()){
int x = q.front();
q.pop();
if(ff)
ff = 0;
else
cout << " ";
cout << x;
if(a[x].right!=-1)
q.push(a[x].right);
if(a[x].left!=-1)
q.push(a[x].left);
}
}
L2-011 玩转二叉树 (25 分)
最新推荐文章于 2023-04-11 09:04:14 发布