简单建树然后输出
#include <iostream>
#include <queue>
using namespace std;
const int MAXN=111;
int num1[MAXN],num2[MAXN],l[MAXN],r[MAXN];
queue<int> qu;
int build(int l1,int r1,int l2,int r2)
{
if(l1>r1)
return -1;
int tree=num2[l2];
int p=l1;
while(num1[p]!=tree)
p++;
int cont=p-l1;
l[tree]=build(l1,l1+cont-1,l2+1,l2+cont);
r[tree]=build(l1+cont+1,r1,l2+cont+1,r2);
return tree;
}
int ff=0;
void bfs(int st)
{
qu.push(st);
while(!qu.empty())
{
int t1,t2;
int k;
k=qu.front(),qu.pop();
if(!ff)
printf("%d",k);
else
printf(" %d",k);
ff++;
t1=l[k],t2=r[k];
if(!(t1==-1&&t2==-1))
swap(l[k],r[k]);
if(l[k]!=-1)
qu.push(l[k]);
if(r[k]!=-1)
qu.push(r[k]);
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>num1[i];
for(int i=0;i<n;i++)
cin>>num2[i];
build(0,n-1,0,n-1);
bfs(num2[0]);
printf("\n");
return 0;
}