
与L2-006近乎相同,先建树,然后遍历
#include<bits/stdc++.h>
using namespace std;
int in[35];
int pre[35];
typedef struct Tree{
    int num;
    Tree* left;
    Tree* right;
}T;
T * build(int in1,int in2,int pre1,int pre2){
    T * t=new T;
    t->num=pre[pre1];
    int key=pre[pre1];
    int i=0;
    for(i=in1;i<=in2;i++){
        if(in[i]==key){
        break;
        }
    }
    int num_node=i-in1;
    if(i!=in1){
    t->left=build(in1,i-1,pre1+1,pre1+num_node);
    }
    if(i!=in2){
    t->right=build(i+1,in2,pre1+num_node+1,pre2);
    }
    return t;
}
void visit(T * t){
    if(t == NULL){
        return ;
    }
    queue<T*> q;
    q.push(t);
    while(!q.empty()){
        T* tt=q.front();
        cout<<tt->num;
        if(tt->right  != NULL){
           q.push(tt->right);
        }
        if(tt->left  != NULL){
           q.push(tt->left);
        }
        q.pop();
        if(!q.empty()){
            cout<<' ';
        }
    }
    
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
    cin>>in[i];
    }
    for(int i=0;i<n;i++){
    cin>>pre[i];
    }
    T * root=build(0,n-1,0,n-1);
    visit(root);
    return 0;
}


















