版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr0cheng/article/details/79367583
- 根据中序和前序序列建树
- 递归回溯时第一个节点即为后序访问的第一个节点
#include<bits/stdc++.h>
using namespace std;
const int maxn=50000+10;
bool flag=false;
int ans;
int inOrder[maxn],preOrder[maxn];
void dfs(int preL,int preR,int inL,int inR){
if(preL>preR || inL>inR)return;
int i;
for(i=inL;i<=inR;++i){
if(inOrder[i]==preOrder[preL]){
break;
}
}
dfs(preL+1,preL+i-inL,inL,i-1);
dfs(preR+i+1-inR,preR,i+1,inR);
if(!flag){
flag=true;
ans=i;
}
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",preOrder+i);
}
for(int i=1;i<=n;++i){
scanf("%d",inOrder+i);
}
dfs(1,n,1,n);
printf("%d",inOrder[ans]);
return 0;
}