binary tree traversals hdu1710
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int pre[1003],in[1003];
//后序遍历是左右根
void dfs(int begin,int end,int root)
{
int i;
if(begin>end) return ;
for(i=begin;i<=end;i++){
if(pre[root]==in[i]) break;
}
dfs(begin,i-1,root+1);//左子树 ,左子树范围必定在begin到i-1之间,下一个根的位置在root+1
dfs(i+1,end,root+i-begin+1);
//右子树,右子树范围必定在i+1到end之间,根的位置就是(i-begin)是左子树的大小,相当于root位置往后移左子树的个数再加一
cout<<pre[root];
if(root==1)//空树
cout<<endl;
else
cout<<" ";
}
int main()
{
int n;
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)
scanf("%d",&pre[i]);
for(int i=1;i<=n;i++)
scanf("%d",&in[i]);
dfs(1,n,1);
}
return 0;
}