先建树,然后再输出
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int a[35],b[35];
int rights[35],lefts[35];
int gettree(int l1,int r1,int l2,int r2)
{
if(l1>r1)
return 0;
int root = a[r2];
int k = 0;
while(b[k]!=root)//找到中序中的根节点
k++;
int cnt = k-l1;
lefts[root] = gettree(l1,k-1,l2,l2+cnt-1);
rights[root] = gettree(k+1,r1,l2+cnt,r2-1);
return root;
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i ++)
scanf("%d",&a[i]);//后序
for(int i = 0; i < n; i ++)
scanf("%d",&b[i]);//中序
gettree(0,n-1,0,n-1);
queue<int>q;
q.push(a[n-1]);
int flag = 0;
while(!q.empty() )
{
int root = q.front();
if(!flag)
{
printf("%d",root);
flag = 1;
}
else
{
printf(" %d",root);
}
q.pop();
if(lefts[root])
q.push(lefts[root]);
if(rights[root])
q.push(rights[root]);
}
}