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]); 
}

Download