树的遍历(bfs)

2023-11-16

题目链接:https://www.acwing.com/problem/content/1499/

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

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

输入格式
第一行包含整数 N N N ,表示二叉树的节点数。

第二行包含 N N N 个整数,表示二叉树的后序遍历。

第三行包含 N N N 个整数,表示二叉树的中序遍历。

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

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

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2
思路:

中序遍历:
每个点的左边,都是它的左子树
每个点的右边,都是它的右子树

后序遍历:
最后一个点是根节点,
然后根据中序遍历,在后序找到两段
第一段是左子树,第二段是右子树
第一段的最后一个点,就是左子树的根节点
第二段的最后一个点,就是右子树的跟节点

递归处理即可

最后从根节点开始BFS就是层序遍历

AC代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <unordered_map>

using namespace std;

const int N = 40;

int n;
int a[N],b[N];
unordered_map<int,int> l,r,pos;
queue<int> que;

int build(int il,int ir,int pl,int pr) // il:先序遍历左端点 ir:先序遍历右端点 pl:后序遍历左端点 pr:后序遍历右端点
{
    int root = a[pr];
    int k = pos[root];
    /*
    
    设后序遍历左子树右端点为x
    有 x - pl = ir - il (ir = k - 1)
    解得 x = ir - il + pl
    即 x = k - 1 - il + pl
    
    后序遍历右子树左端点 = 后序遍历左子树右端点 + 1
    后序遍历右子树右端点 = 根节点前一个点 pr - 1
    
    */
    if(il < k) l[root] = build(il, k - 1, pl, k - 1 - il + pl);
    if(ir > k) r[root] = build(k + 1, ir, k - 1 - il + pl + 1, pr - 1);
    return root;
}

void bfs(int root)
{
    que.push(root);
    while(que.size())
    {
        int t = que.front();
        que.pop();
        if(l.count(t)) que.push(l[t]);
        if(r.count(t)) que.push(r[t]);
        if(que.size()) cout << t << " ";
        else cout << 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];
        pos[b[i]] = i; // 存中序遍历的位置
    }
    int root = build(0, n - 1, 0, n - 1);
    bfs(root);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树的遍历(bfs) 的相关文章

随机推荐

  • Spring原理-IoC容器初始化过程

    IoC容器初始化过程 IoC容器的两个核心接口BeanFactory和ApplicationContext大概功能都讲解了一些 接下来我们讲解一下IoC容器的初始化过程 让大家有一个深一点的理解 讲解还是以FileSystemXmlAppl
  • 卷积神经网络CNN在自然语言处理中的应用

    卷积神经网络 Convolution Neural Network CNN 在数字图像处理领域取得了巨大的成功 从而掀起了深度学习在自然语言处理领域 Natural Language Processing NLP 的狂潮 2015年以来 有
  • 【vulnhub靶机】DC-3

    原知识星球老文搬运 拿到靶机之后导入到virtualBOX里面 1 nmap扫描主机存活 192 168 56 104 有个80端口 不放心的话可以用masscan 2 直接访问看下 这里提示只有一个flag 直接拿到root权限 3 习惯
  • uniapp开发的h5网页如何去掉网址里的#号

    在manifest json里配置history模式 这里特别注意下面的 运行的基础路径 里不要写 因为这个默认会强制hash模式 如图 然后再服务器端配置下规则 history模式下配置nginx location try files u
  • GPL和MIT开源协议

    GPL GNU通用公共许可证简称为GPL 是由发行的用于计算机软件的协议证书 使用该证书的软件被称为自由软件 大多数的GNU程序和超过半数的自由软件使用它 GPL的出发点是代码的开源 免费使用和引用 修改 衍生代码的开源 免费使用 但不允许
  • char码值对应列表大全

    Char 0 为0的字符 Char 1 Char 2 Char 3 Char 4 Char 5 Char 6 Char 7 响铃 Char 8 回格 Char 9 tab 水平制表符 Char 10 换行 Char 11 tab 垂直制表符
  • Dump文件的生成以及使用WinDbg静态分析

    前言 本文章主要介绍了如何生成Dump文件 包括两种方式 通过代码生成和通过注册表生成 并且介绍了WinDbg工具的下载和使用 以及如何使用WinDbg工具去静态分析Dump文件 从而找到程序的崩溃位置 生成Dump文件 通过调用WinAP
  • cas 编译安装依赖时提示: Failure to find net.shibboleth.tool:xmlsectool:jar:2.0.0

    错误信息 Could not resolve dependencies for project org apereo cas cas overlay war 1 0 Failure to find net shibboleth tool x
  • 本地 Django 部署 Heroku的时候某个 / 某些数据库显示总是无法创建成功 relation “nnsh_backend_new_userinfo“ does not exist LINE

    文章目录 情景 原因 操作 手动 自动 情景 假设你有一个项目 A 你之前部署了项目 A 里面包含了两个数据库的表 table1 和 table2 他们都顺利部署 然后你相加一些功能 于是又创建了一张表 table3 于是再部署的时候发现
  • glBindFragDataLocation

    异构计算GLSL学习笔记 1 原文地址 http blog csdn net hjimce article details 51475644 作者 hjimce 最近开始学习深度学习的一些gpu编程 大体学了cuda后 感觉要在手机上跑深度
  • python-查看帮助

    help 一 不同的环境下 1 交互模式下 命令行 查看模块的帮助信息 import pickle help pickle 可以看到详细信息 More 上回车 滚动信息 q 退出帮助 2 ide里 需要做一个输出 import pickle
  • unity基础编程(一)

    以此来记录系统学习使用unity的知识方便以后复习使用 如果能得到监督和指导 不胜感激 unity常用使用快捷键 1 Q 抓手工具 W 移动工具 E 旋转工具 R 缩放工具 T 横切面工具 就在键盘一排试一试就会很清楚了 2 Z 轴点模式切
  • 自动在图片上添加页码

    在一次工作中 需要对几百GB的图片文件添加页码 也就是在图片添加一定的流水号 那么 在图片上添加页码 总的需要四个步骤 1 图片重命名 批量修改原图片名 设置流水号作为图片文件名 如 0001 gt 0036 2 添加页码 通iSee软件批
  • Docker赋能物联网:探索软件供应链的优势、挑战和安全性

    作者 JFrog大中华区总经理董任远 随着联网设备硬件性能的日益提升及价格愈发低廉 物联网应用的复杂性随之提升 常用的容器化平台Docker能够帮助精简流程 助力开发人员更轻松地创建和维护物联网应用 本文将探讨Docker为物联网开发带来的
  • 最大熵原理

    最近看到一位高手 说了最大熵原理应用在排名 让我倍感发抖 网上有个人连研究基本步骤都写完了 着实让蛋疼了一小下 就引用一下吧 最大熵原理在1957 年由E T Jaynes 提出的 主要思想是 在只掌握关于未知分布的部分知识时 应该选取符合
  • 第1.2章 神经网络中隐藏层、偏置单元、激活函数的作用(使用激活函数的原因)

    神经网络中隐藏层 偏置单元 激活函数的作用 隐藏层 偏置单元 激活函数 权重 摘要 这篇文章主要是对上一篇文章中所给例题中部分知识点的讲解 较多的参考了网上其他朋友的资料 主要是供大家学习和自己以后查看资料方便 如有侵权 请告知 我会及时修
  • git 回滚

    1 没有push 这种情况发生在你的本地代码仓库 可能你add commit 以后发现代码有点问题 准备取消提交 用到下面命令 reset git reset soft mixed hard 上面常见三种类型 mixed 会保留源码 只是将
  • C语言函数大全-- r 开头的函数

    r 开头的函数 1 raise 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 rand 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 read 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 realloc
  • DFS 刷题记录(laptop part)(2022.2.10)

    namespace matchstick my int isDividedby4 vector
  • 树的遍历(bfs)

    题目链接 https www acwing com problem content 1499 题目 一个二叉树 树中每个节点的权值互不相同 现在给出它的后序遍历和中序遍历 请你输出它的层序遍历 输入格式 第一行包含整数 N N N 表示二叉