二叉树遍历C++

发布时间:2024年01月13日

假设二叉树上各结点的权值互不相同且都为正整数。
给定二叉树的后序遍历和中序遍历,请你输出二叉树的前序遍历的最后一个数字。

输入格式
第一行包含整数 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;
}
文章来源:https://blog.csdn.net/qq_46380990/article/details/135569588
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。