简单递归建树,然后bfs输出层序
#include <iostream>
#include <queue>
using namespace std;
const int MAXN=33;
int t1[MAXN],t2[MAXN];
int l[MAXN],r[MAXN];
queue<int> qe;
int build(int l1,int r1,int l2,int r2)
{
if(l1>r1)
return -1;
int p=l1;
while(t1[p]!=t2[r2])
p++;
int cont=p-l1;
int tree=t2[r2];
l[tree]=build(l1,l1+cont-1,l2,l2+cont-1);
r[tree]=build(l1+cont+1,r1,l2+cont,r2-1);
return tree;
}
int fl=0;
void bfs(int t)
{
qe.push(t);
while(!qe.empty())
{
int k=qe.front();
qe.pop();
if(!fl)
printf("%d",k);
else
printf(" %d",k);
fl++;
if(l[k]!=-1)
qe.push(l[k]);
if(r[k]!=-1)
qe.push(r[k]);
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>t2[i];
for(int i=0;i<n;i++)
cin>>t1[i];
build(0,n-1,0,n-1);
bfs(t2[n-1]);
return 0;
}