#include<bits/stdc++.h>
using namespace std;
int a[110],b[110],h[110],n,sum,tot;
int findn(int flag,int u)
{
if(flag==0)
{
for(int i=1; i<=n; i++)
if(a[i]==u)
return i;
}
else
{
for(int i=1; i<=n; i++)
if(b[i]==u)
return i;
}
}
int findb(int l,int r)
{
int minn=0x3f3f3f3f;
for(int i=l; i<=r; i++)
minn=min(minn,findn(0,b[i]));
return minn;
}
void finds(int u,int k,int l,int r)
{
if(tot)
return;
if(k<=n)
{
h[k]=a[u];
sum++;
if(sum==n)
{
tot=1;
return;
}
int ans=findn(1,a[u]);
finds(findb(l,ans-1),k*2,l,ans-1);
finds(findb(ans+1,r),k*2+1,ans+1,r);
}
return;
}
void hou(int u)
{
if(u*2<=n)
hou(u*2);
if(u*2+1<=n)
hou(u*2+1);
printf("%d ",h[u]);
return;
}
int main()
{
cin>>n;
memset(h,0x3f,sizeof(h));
for(int i=1; i<=n; i++)
cin>>a[i];//先
for(int i=1; i<=n; i++)
cin>>b[i];//中
finds(1,1,1,n);
hou(1);
return 0;
}
自己写着玩的,正确性待考究,但是数组模拟二叉树好像只能建完全二叉树,毕竟数组不能跳着存