AcWing 1497:树的遍历

【题目来源】
https://pintia.cn/problem-sets/994805342720868352/exam/problems/994805485033603072
https://www.acwing.com/problem/content/description/1499/

【题目描述】
一个二叉树,树中每个节点的权值互不相同。
现在给出它的后序遍历和中序遍历,请你输出它的
层序遍历

【输入格式】
第一行包含整数 N,表示二叉树的节点数。
第二行包含 N 个整数,表示二叉树的后序遍历。
第三行包含 N 个整数,表示二叉树的中序遍历。


【输出格式】
输出一行 N 个整数,表示二叉树的层序遍历。

【数据范围】
1≤N≤30,
官方并未给出各节点权值的取值范围,为方便起见,在本网站范围取为 1∼N。

【输入样例】
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

【输出样例】
4 1 6 3 5 7 2

【算法分析】

◆● unordered_map
https://cplusplus.com/reference/unordered_map/
(1)unordered_map 适用于需要快速查找,且不要求元素存储顺序的场景,尤其适合使用自定义类型作为键的情况。但是需要注意的是,unordered_map 并不支持 lower_bound 和 upper_bound 等操作。因此,在需要按照键值的大小顺序查找元素时,可以考虑使用 map
(2)从
C++ 11 开始,hash_map 实现已被添加到 C++ STL 标准库中,但为了防止与已有的代码存在冲突,决定使用替代名称 unordered_map。这个名字其实更具描述性,因为说明了该类元素的无序性。当然,这也决定了若要使用unordered_map,必须使用支持C++ 11标准的编译器
Dev-C++中可按下图所示进行设置,使之支持C++ 11。



(3)unordered_map内部实现了一个哈希表 (也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),故其在海量数据处理中有着广泛应用)。

◆●
unordered_map::count
https://cplusplus.com/reference/unordered_map/unordered_map/count/

◆● 二叉树构建函数的参数确立示意图
ile:中序遍历左端点位置,iri:中序遍历右端点位置
ple:后序遍历左端点位置,pri:后序遍历右端点位置

 

 【算法代码】

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#include <queue>
using namespace std;const int maxn=35;
int n;
int postorder[maxn],inorder[maxn];
unordered_map<int,int> le,ri,pos;int build(int ile,int iri,int ple,int pri){int root=postorder[pri];int k=pos[root];if(ile<k) le[root]=build(ile,k-1,ple,ple+k-1-ile);if(iri>k) ri[root]=build(k+1,iri,ple+k-1-ile+1,pri-1);return root;
}void bfs(int root){queue<int> q;q.push(root);while(!q.empty()){ //q.size()int t=q.front();q.pop();cout<<t<<" ";if(le.count(t)) q.push(le[t]);if(ri.count(t)) q.push(ri[t]);}
}int main(){cin>>n;for(int i=0;i<n;i++) cin>>postorder[i];for(int i=0;i<n;i++){cin>>inorder[i];pos[inorder[i]]=i;}int root=build(0,n-1,0,n-1);bfs(root);return 0;
}/*
in:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7out:
4 1 6 3 5 7 2
*/






【参考文献】
https://blog.csdn.net/Jacksqh/article/details/111188208
https://www.acwing.com/video/2647/
https://blog.csdn.net/ly0724ok/article/details/117362251
https://blog.csdn.net/lzq8090/article/details/129788666







 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15608.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫与数据挖掘在外汇市场分析中的应用

外汇市场是全球最大的金融市场之一&#xff0c;每天的交易量可以达到几万亿美元。深入了解外汇市场的趋势和变化对于投资者来说至关重要&#xff0c;因为即使是微小的价格波动也可能导致巨额利润或损失。从过去的历史数据中抽取经验教训&#xff0c;并使用数据挖掘算法来预测未…

MOS管结构--NMOS、PMOS、CMOS、NAND、NOR、latch up(闩锁效应) 、Channel Length vs Gate Length

文章目录 NMOSPMOSCMOS (Complementary Metal Oxide Semiconductor)NAND&#xff08;与非门&#xff09;NAND layout NOR&#xff08;或非门&#xff09;latch up&#xff08;闩锁效应&#xff09;Channel Length vs Gate Length NMOS 如果硅区域中掺杂了具有五价电子&#xff…

Kotlin~Command模式

概念 把请求转化为独立的对象 角色介绍 Command: 命令接口ConcreteCommand: 具体命令实现类 UML 代码实现 interface Command {fun execute(vararg arg: String):Int } class Print : Command {override fun execute(vararg arg: String): Int {println("Print:${arg…

一些行业报告--From 艾瑞咨询

一些行业报告--From 艾瑞咨询 1 介绍2 机械臂行业研究 [From 艾瑞咨询 -- 中国工业机器人行业研究报告&#xff08;2023&#xff09;2.1 发展历程2.2 中国工业机器人相关政策2.3 产业链2.4 三大部分六大系统2.5 伺服&控制器 主要玩家 及 关键指标及难点2.6 减速机 主要玩家…

面向 “大模型” 的未来服务架构设计

文章目录 大模型热潮大模型落地服务设计 or 重构未来的服务架构微服务化分层化 大模型应用架构架构设计图架构 Demo 实现 小结附录 大模型热潮 今年的互联网赛道中 “顶流” 非大模型莫属。 科技部新一代人工智能发展研究中心 5 月底发布的《中国人工智能大模型地图研究报告》显…

Linux下使用curl命令发送GET和POST请求

目录&#xff1a; 1、发送get请求带请求头2、发送post请求带请求头带参数 1、发送get请求带请求头 curl -X GET "http://localhost:8080/onlinePreviewCallbackApiManagement/v1/3rd/file/info" -H "accept: */*" -H "X-Weboffice-File-Id: 123"…

图像增广:强化深度学习的视觉表现力

目录 摘要&#xff1a; 1. 图像增广简介 2. 图像增广的原理 3. 常见的图像增广技术 4. 如何在实际项目中应用图像增广 5.实际应用 摘要&#xff1a; 当今&#xff0c;深度学习已经在计算机视觉领域取得了令人瞩目的成就。图像增广作为一种数据处理技术&#xff0c;让我们…

FreeRTOS ~(七)互斥量 ~ (2/3)互斥量解决优先级反转问题

前情提要 FreeRTOS ~&#xff08;四&#xff09;同步互斥与通信 ~ &#xff08;2/3&#xff09;互斥的缺陷 FreeRTOS ~&#xff08;五&#xff09;队列的常规使用 ~ &#xff08;2/5&#xff09;队列解决互斥缺陷 FreeRTOS ~&#xff08;六&#xff09;信号量 ~ &#xff08;2/…

swiftUI和swift的区别

概述 SwiftUI是苹果公司推出的一种用于构建iOS、macOS、watchOS和tvOS应用程序界面的框架。它是基于Swift编程语言开发的&#xff0c;旨在简化UI开发过程并提供实时预览功能&#xff0c;使开发人员可以更快地构建出漂亮的应用程序界面。 Swift是苹果公司推出的一种面向对象的…

Openlayers实战:overlay上播放视频

在企业或者城市等的宣传上,视频能很好的传达出一些信息。 那么在openlayer中如何展示视频呢, 可以通过overlay的方式,点击某一个点,弹出overlay层,展示出视频,并自动播放。下面的实战就能够达到这种效果。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还…

OPPO手机便签怎么设置字体颜色?便签调整字体颜色方法

OPPO是一个非常受年轻人青睐的手机品牌&#xff0c;它的手机不仅外观设计时尚轻薄&#xff0c;而且拍照清晰、系统流畅&#xff0c;并且拥有高中低不同档次的价位可供消费者选择。虽然OPPO手机的使用体验非常不错&#xff0c;但是有一部分用户也遇到了一些问题&#xff0c;例如…

牛客小白月赛75 DE

D 矩阵 登录—专业IT笔试面试备考平台_牛客网 思路&#xff1a;我们能够发现每个点最多只用两种状态&#xff0c;一种是不变&#xff0c;另一种是改变&#xff0c;如果相邻的点与当前点不相同&#xff0c;则可以花费一个单位走过去&#xff0c;否则需要先改变它的状态&#x…