1497. 树的遍历

news2024/11/24 16:24:48

文章目录

  • 1.二叉树的遍历
  • 2.二叉树的构造
  • 3.例题
      • 3.1不使用BFS
      • 3.2使用BFS

二叉树的构造:没有中序遍历则无法唯一构造

1.二叉树的遍历

2.二叉树的构造

在这里插入图片描述
在这里插入图片描述

3.例题

一个二叉树,树中每个节点的权值互不相同。

现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。

输入格式
第一行包含整数 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

3.1不使用BFS

#include <iostream>
#include <vector>

using namespace std;
const int N = 35;

int a[N], b[N], p[N];

vector<int> level[N];

void build(int al, int ar, int bl, int br, int d)
{
    if(al > ar) return;
    int val = a[ar]; // 根节点
    level[d].push_back(val);
    int k = p[val]; // 根节点的下标
    build(al,al + k - 1 - bl , bl, k - 1, d + 1); // 左子树
    build(al + k - bl, ar - 1, k + 1, br, d + 1);
}

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i ++) cin >> a[i];
    for (int i = 0; i < n; i ++) cin >> b[i];
    for (int i = 0; i < n; i ++) p[b[i]] = i;
    
    build(0, n - 1, 0, n - 1, 0);
    
    for (int i = 0; i < n; i ++)
        for (auto x: level[i])
            cout << x << ' ';
    return 0;
    
}

3.2使用BFS

#include <iostream>
#include <queue>

using namespace std;

const int N = 35;
int a[N], b[N], p[N];
int l[N], r[N];
int n;

int build(int al, int ar, int bl, int br)
{
    if (al > ar) return 0;
    int val = a[ar];
    int k = p[val];
    
    l[val] = build(al, k - 1 - bl + al, bl, k - 1);
    r[val] = build(k - bl + al, ar - 1, k + 1, br);
    
    return val;
}

void bfs()
{
    queue<int> q;
    q.push(a[n - 1]); // 根节点入队
    while(q.size())
    {
        int t = q.front(); // 队首
        q.pop(); // 删除队首
        cout << t << ' ';
        if (l[t]) q.push(l[t]); // 左孩子
        if (r[t]) q.push(r[t]); // 右孩子
    }
}
int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++) cin >> a[i];
    for (int i = 0; i < n; i ++) cin >> b[i];
    for (int i = 0; i < n ; i ++) p[b[i]] = i;
    
    build(0, n - 1, 0, n - 1);
    
    bfs();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯训练day2

day21.二分(1)789. 数的范围(2)四平方和&#xff08;1&#xff09;哈希表做法&#xff08;2&#xff09;二分做法(3)1227. 分巧克力&#xff08;4&#xff09;113. 特殊排序(5)1460. 我在哪&#xff1f;2.双指针(1)1238. 日志统计(2)1240. 完全二叉树的权值&#xff08;3&#…

koa-vue的分页实现

1.引言 最近确实体会到了前端找工作的难处&#xff0c;不过大家还是要稳住心态&#xff0c;毕竟有一些前端大神说的有道理&#xff0c;前端发展了近20年&#xff0c;诞生了很多leader级别的大神&#xff0c;这些大神可能都没有合适的坑位&#xff0c;我们新手入坑自然难一些&am…

HD-G2L-IOT V2.0核心板MPU压力测试

1. 测试对象HD-G2L-IOT基于HD-G2L-CORE V2.0工业级核心板设计&#xff0c;双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。H…

PMP高分上岸人士的备考心得,分享考试中你还不知道的小秘密

上岸其实也不是什么特别难的事情&#xff0c;考试一共就180道选择题&#xff0c;题目只要答对60.57%就可以通过考试&#xff0c;高分通过没在怕的&#xff0c;加油备考呀朋友们&#xff01; 这里也提一嘴&#xff0c;大家备考的时候比较顾虑的一个问题就是考试究竟要不要报班…

js循环判断的方法

js循环判断的方法if语句if else语句if else if else if......三元表达式switchswitch语句和if语句的区别for循环while循环do while循环for inforEachfor of性能问题if语句 条件满足就执行&#xff0c;不满足就不执行 if(条件){语句}if else语句 条件满足&#xff0c;执行语句…

认识3D旋转变换矩阵

前文输出了cesium的Rotation变量&#xff0c;一个矩阵&#xff1b;把这矩阵写下来看下&#xff1b; 0.99939 -0.034899 0 0 0.034899 0.99939 0 0 0 0 1 0 0 0 0 1 看一下3D数学的相关描述&#xff1b;…

周赛335(模拟、质因子分解、分组背包)

题解&#xff1a;0x3f https://leetcode.cn/problems/number-of-ways-to-earn-points/solution/fen-zu-bei-bao-pythonjavacgo-by-endlessc-ludl/ 文章目录周赛335[6307. 递枕头](https://leetcode.cn/problems/pass-the-pillow/)模拟[6308. 二叉树中的第 K 大层和](https://le…

扬帆优配|本周限售股解禁规模不足300亿元,这8家公司解禁压力大

本周限售股解禁规模环比大降至300亿元之下。 Wind数据显示&#xff0c;除掉新上市公司&#xff0c;本周A股商场共有36家公司限售股解禁&#xff0c;解禁数量27.69亿股&#xff0c;以最新收盘价核算&#xff08;下同&#xff09;&#xff0c;解禁市值268.81亿元。 解禁市值超越…

【第二章 @RequestMapping注解(value,method,params属性),springMVC支持ant风格的路径,支持路径中的占位符】

第二章 RequestMapping注解&#xff08;value&#xff0c;method&#xff0c;params属性&#xff09;&#xff0c;springMVC支持ant风格的路径&#xff0c;支持路径中的占位符 1. RequestMapping注解&#xff1a; &#xff08;1&#xff09; RequestMapping注解的作用就是将请…

数据结构与算法之桶排序

目录桶排序概念代码实现时间复杂度桶排序概念 桶排序 &#xff08;Bucket sort&#xff09;或所谓的箱排序&#xff0c;是一个排序算法&#xff0c;工作的原理是将数组分到有限数量的桶里。每个桶再个别排序&#xff08;有可能再使用别的排序算法或是以递归方式继续使用桶排序…

如何根据实际需求选择合适的三维实景建模方式?

随着实景三维中国建设的推进&#xff0c;对三维实景建模的数字化需求大幅增加。由于三维实景建模具有采集速度快、计算精度高等建模优势&#xff0c;引起了各个行业的高度关注。三维实景建模是一种应用数码相机或者激光扫描仪对现有场景进行多角度环视拍摄&#xff0c;然后利用…

进制转换(详解二进制、八进制、十进制、十六进制的相互转换)

目录二进制运算规则十进制的转换二进制数、八进制数、十六进制数的相互转换&#x1f458;什么是数制 用进位的原则进行计数称为进位计数制&#xff0c;简称数制。进位计数制的特点是表示数值大小的数码与它所处的位置有关&#xff0c;每种数制都包含两个基本的要素&#xff1a;…

WPF WrapPanel、UniformGrid、DockPanel介绍

WPF WrapPanel、UniformGrid、DockPanel介绍 WrapPanel WrapPanel , 具有在有限的容器范围内, 可以自动换行, 或者换列处理。具体则取决于WrapPanel的排列方式 (Orientation)。 Orientation"Horizontal"时各控件从左至右罗列&#xff0c;当面板长度不够时&#xff…

JMM JVM 垃圾回收

目录 一、JMM内存模型 1、定义 2、JMM的三大特性(可见性原子性有序性) 2.1 可见性 2.2 原子性 2.3 有序性 3、JMM中的8种原子操作 二、JVM 1、JVM体系结构 2、JVM参数调优 2.1 三大参数类型 2.2 九个调优参数 三、垃圾回收器 1、4种GC算法(引用计数 /复制拷贝/标…

深度学习pytorch实战三:VGG16图像分类篇自建数据集图像分类三类

1.自建数据集与划分训练集与测试集 2.模型相关知识 3.model.py——定义AlexNet网络模型 4.train.py——加载数据集并训练&#xff0c;训练集计算损失值loss&#xff0c;测试集计算accuracy&#xff0c;保存训练好的网络参数 5.predict.py——利用训练好的网络参数后&#xff0c…

【Taro开发】-文字展开收起组件(十五)

Taro小程序开发 系列文章的所有文章的目录 【Taro开发】-初始化项目&#xff08;一&#xff09; 【Taro开发】-路由传参及页面事件调用&#xff08;二&#xff09; 【Taro开发】-taro-ui&#xff08;三&#xff09; 【Taro开发】-带token网络请求封装&#xff08;四&#x…

Sonar:Win10搭建SonarQube9.8服务

需求描述 公司为项目代码配置了Sonar检测&#xff0c;最初只是想调研在VSCode中同步远程检测的方法&#xff08;现在请参考Sonar&#xff1a;VSCode配置SonarLint/SonarLint连接SonarQube&#xff09;&#xff1b;结果并没有找到靠谱的教程。。在度娘的信息海洋胡乱扑腾两天后…

Docker(七)--Docker数据卷管理及插件

文章目录一、Docker 数据卷管理1.bind mount2.docker managed volume3.bind mount与docker managed volume对比二、跨节点存储convoy卷插件一、Docker 数据卷管理 在实际使用过程中&#xff0c;我们需要把容器和数据进行隔离&#xff0c;因为容器在使用过程中可能随时要进行销…

C++:set和map(模拟实现)

目录 关联式容器 键值对 树形结构的关联式容器 set的介绍 set的使用 map的介绍 map的使用 multiset的介绍 multimap的介绍 底层结构 AVL树的概念 AVL树节点的定义 AVL树的旋转 左单旋 右单旋 先右单旋再左单旋 先左单旋再右单旋 模拟实现AVL树 红黑树 红黑树…

【C++】30h速成C++从入门到精通(stack、queuepriority_queue以及deque介绍)

stackstack的介绍https://cplusplus.com/reference/stack/stack/?kwstackstack是一种容器适配器&#xff0c;专门在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特…