BINTREE - Duyệt cây nhị phân
Tác giả: hieult
Ngôn ngữ: C++
#include<cstdio>
#include<cmath>
#include<math.h>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
#define ep 0.00001
#define maxn 100111
#define oo 1111111111
#define modunlo 111539786
#define TR(c, it) for(typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++)
//#define g 9.81
double const PI=4*atan(1.0);
using namespace std;
typedef pair<int, int> II;
typedef vector<int> VI;
typedef vector<II> VII;
typedef vector<VI> VVI;
typedef vector<VII> VVII;
int n,a[55555],vitri[55555],x;
VI V;
void xuly(int u,int v,int p,int q){
if(u>v) return ;
if(u==v){
V.push_back(a[u]);
return;
}
V.push_back(a[u]);
int t = vitri[a[u]];
xuly(u+t-p+1,v,t+1,q);
xuly(u+1,u+t-p,p,t-1);
}
int main(){
// freopen("BINTREE.in","r",stdin);
// freopen("BINTREE.out","w",stdout);
scanf("%d",&n);
for(int i = 1;i<=n;i++) scanf("%d",&a[i]);
for(int i = 1;i<=n;i++) {
scanf("%d",&x);
vitri[x] = i;
}
xuly(1,n,1,n);
for(int i = n-1;i>=0;i--) printf("%d ",V[i]);
}