#include<iostream>
#include<cstdio>
using namespace std;
int n, pre[110], in[110], post[110], cnt=0;
int find(int ist, int ied, int target){
for(int i=ist; i<ied; i++)
if(in[i]==target)
return i;
}
void postOrder(int prst, int pred, int ist, int ied){
if(prst==pred) return;
int root = find(ist, ied, pre[prst]);
int len = root-ist;
postOrder(prst+1, prst+len+1, ist, root);
postOrder(prst+len+1, pred, root+1, ied);
post[++cnt]=in[root];
return;
}
int main(){
while(cin>>n)
{
cnt=0;
for(int i=1; i<=n; i++)
cin>>in[i];
for(int i=1; i<=n; i++)
cin>>pre[i];
postOrder(1, n+1, 1, n+1);//必须写n+1,牵扯到后面结束。
for(int i=1; i<=cnt; i++)
cout<<post[i]<<" ";
cout<<<<endl;
}
return 0;
}
HRBUST - 2040 二叉树的遍历(由前序遍历和中序遍历推出后序遍历)
最新推荐文章于 2020-11-22 16:51:51 发布