若对二叉树的遍历不理解的话,建议查询此链接(8.46复制打开抖音,看看【Shirley的作品】【数据结构】9-2二叉树的递归遍历# 数据结构 #… https://v.douyin.com/iYxTofrk/ L@W.Zm mqr:/03/10),或许对你有些许帮助!
#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 50010;
int a[N];
int b[N];//后续遍历 中序遍历
int ans;
unordered_map<int,int> p;//记录中序遍历数组中每个元素的索引
void solve(int al,int ar,int bl,int br){
if(al > ar) return;
int root = a[ar];
int k = p[root];
ans = root;
solve(al,k-1-bl+al,bl,k-1);//左子树遍历
solve(k-bl+al,ar-1,k+1,br);//右子树遍历
}
int main(){
int n;
cin>>n;
for(int i = 0;i<n;i++){
cin>>a[i];
}
for(int j =0;j<n;j++){
cin>>b[j];
p[b[j]] = j;
}
solve(0,n-1,0,n-1);
cout<<ans;
//如果是输出前序遍历的最后一个元素则放至主函数中,如何是为了输出前序遍历,则在两次调用前输出ans(root),最后得到相应的前序遍历数组
return 0;
}