原文链接:我的个人链接
原题链接
考点
树,树的遍历
思路
这题就是很简单的根据树的前序序列和中序序列得到后序序列
代码
#include <bits/stdc++.h>
using namespace std;
vector<int>pre,in,post;
int n;
void getpost(int preleft,int preright,int inleft,int inright){
if(preleft>preright||inleft>inright) return;
int root = pre[preleft];
int i = inleft;
while(in[i]!=root)i++;
getpost(preleft+1,preleft+(i-inleft),inleft,i-1);//左子树
getpost(preleft+1+(i-inleft),preright,i+1,inright);//右子树
post.push_back(root);
}
int main(){
cin>>n;
pre.resize(n+1,0);
in.resize(n+1,0);
for(int i=0;i<n;i++) scanf("%d",&pre[i]);//前序序列
for(int i=0;i<n;i++) scanf("%d",&in[i]);//中序序列
getpost(0,n-1,0,n-1);
cout<<post[0]<<endl;
}