​传送门​

题目大意

根据给出的二叉树的前序遍历和中序遍历,求出后序遍历

思路

HDU 1710 Binary Tree Traversals(二叉树遍历)_先序


根据先序找到根,根据中序找到左右孩子

代码

int t1[1001],t2[1001];

void find(int a,int b,int n,int flag){
if(n==1){
printf("%d ",t1[a]);
return ;
}
else if(n<=0){
return ;
}
int i;
for(i=0;t1[a]!=t2[b+i];i++) ;//找到根节点
find(a+1,b,i,0);
find(a+i+1,b+i+1,n-i-1,0);
if(flag==1){
printf("%d",t1[a]);
}
else{
printf("%d ",t1[a]);
}
}

int main(){
int n;
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++){//先序
cin>>t1[i];
}
for(int i=1;i<=n;i++){//中序
cin>>t2[i];
}
find(1,1,n,1);
puts("");
}
}