#include <iostream>
using namespace std;
int preOrder[50010];
int inOrder[50010];
int findFirst(int preL,int preR,int inL,int inR){
int root = preOrder[preL];
if(preL == preR)
return root;
int rootInInOrder;
for(int i = inL;i <= inR;i++){
if(inOrder[i] == root){
rootInInOrder = i;
break;
}
}
if(rootInInOrder == inL){ // 没有左子树,在右子树中找
return findFirst(preL + 1,preR,inL + 1,inR);
}else{
int leftSubTree = rootInInOrder - inL;
return findFirst(preL + 1,preL + leftSubTree,inL,inL + leftSubTree - 1);
}
}
int main(){
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++)
scanf("%d",&preOrder[i]);
for(int i = 0;i < n;i++)
scanf("%d",&inOrder[i]);
int res = findFirst(0,n - 1,0,n - 1);
printf("%d",res);
system("pause");
return 0;
}
PAT | A1138 Postorder Traversal
最新推荐文章于 2024-03-02 12:27:09 发布