假设二叉树上各结点的权值互不相同且都为正整数。
给定二叉树的后序遍历和中序遍历,请你输出二叉树的前序遍历的最后一个数字。
输入格式
第一行包含整数 N,表示二叉树结点总数。
第二行给出二叉树的后序遍历序列。
第三行给出二叉树的中序遍历序列。
输出格式
输出二叉树的前序遍历的最后一个数字。
数据范围
1≤N≤50000,
二叉树结点权值范围 [1,109]。
输入样例:
7
1 2 3 4 5 6 7
2 1 4 3 7 5 6
输出样例:
5
#include<iostream>
#include<unordered_map>
using namespace std;
const int N=50010;
int a[N],b[N],res,n;
unordered_map<int,int> p;
void build(int al,int ar,int bl,int br)
{
if(al>ar) return;
int root=a[ar];
int k=p[root];
res=root;
build(al,al+k-bl-1,bl,k-1);
build(al+k-bl,ar-1,k+1,br);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++){
cin>>b[i];
p[b[i]]=i;
}
build(0,n-1,0,n-1);
cout<<res;
return 0;
}