不用动脑子的技巧!已知二叉树的前序中序遍历,确定二叉树/求后序遍历

news2024/11/25 20:37:07

根据前(后)序、中序,确定二叉树,高妙的方法!!!

  • 二叉树的前中后序遍历
  • ⏩巧妙的方法!
  • 根据前序遍历和中序遍历,确定二叉树
    • 例题1
    • 例题2
  • 根据后序遍历和中序遍历,确定二叉树
    • 例题1❗
    • 例题2
    • 例题3

只需动动笔画个图,秒画二叉树~~

声明:本篇文章的技巧适合做选择填空题,编程还得是老路子
–例题全部选自牛客–

二叉树的前中后序遍历

若二叉树为空,则空操作 ->

前序遍历( preorder Travelsal )
1️⃣先访问根节点; 2️⃣前序遍历左子树; 3️⃣前序遍历右子树。
中序遍历( inorder Travelsal )
1️⃣中序遍历根节点的左子树; 2️⃣访问根节点然后访问根节点; 3️⃣中序遍历右子树。
后序遍历( postorder Travelsal )
1️⃣后序遍历左子树; 2️⃣后序遍历右子树; 3️⃣访问根结点。

⏩巧妙的方法!

已知二叉树中的结点有n个

画一组坐标轴(类似小学一年级学的x、y轴),或者想象网格,道理是一样的

step1:
🍎如果是已知前序遍历和中序遍历:
咱们把前序遍历的结果倒序,然后从y轴的1开始,自下而上填在坐标轴上
把中序遍历的结果直接写在x轴的1到n

🍎如果是已知后序遍历和中序遍历:
把后序遍历的结果直接写在y轴的1到n
把中序遍历的结果直接写在x轴的1到n

step2:
将x轴和y轴填入的结点对应,填在第一象限

step3:
按照“自上而下,从左到右”的原则,连接各个结点,二叉树就完美被还原啦!!!

‼️注意 连接各个结点的时候,下层的结点不能 “跨过” 上层的结点,因为这样会改变二叉树中序遍历的次序
(这里的层指的是坐标系中从上到下的层次,跟树的第n层不是一个概念,我们画的结点所在的层不是真的在二叉树中的层)‼️

比如:
在这里插入图片描述
D和M在我们画的图中处于不同的层次,但是他们在二叉树中都处于第二层

根据前序遍历和中序遍历,确定二叉树

上面描述的可能有些抽象,
我们直接上例题,相信大家一眼就能看懂

例题1

在这里插入图片描述第一步,画图!
在这里插入图片描述
第二步,填上结点!
在这里插入图片描述
第三步,按照“自上而下,从左到右”,画出二叉树

在这里插入图片描述

有同学问我,为什么不能这样连接,不是从左到右吗?

在这里插入图片描述
记住第三步的原则:“自上而下,从左到右”‼️要先搞定上下的顺序,再搞定左右顺序

(下图原理就是根据前序遍历中的第一个结点就是根结点,再在中序里确定根结点左边的结点是左子树的结点,右边是右子树的结点)
在这里插入图片描述

例题2

在这里插入图片描述好像跟上面的一样,嘿嘿

在这里插入图片描述

根据后序遍历和中序遍历,确定二叉树

例题1❗

在这里插入图片描述照葫芦画瓢~~
在这里插入图片描述

但是这里有个问题,有同学可能要问了,“你不是说自上而下从左到右”吗,我也没违反这个原则,这里为什么不能这样画呢?
👇
在这里插入图片描述
为什么呢?因为这样画中序遍历就麻烦了,跟题目的不一样了,题目给的中序遍历结果是debac,要是像这样画中序遍历就变成edbac了,当然不能这样画
–⏩巧妙的方法!最后的注意,讲的就是这种情况

例题2

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

例题3

在这里插入图片描述注意这道题求的是层序遍历,不是后序
在这里插入图片描述

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

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

相关文章

CS224W3.2——随机游走(Random Walk)

上一文中说道定义节点相似度函数的时候使用Random Walk方法: CS224W3.1——节点Embedding 这节课来说一下Random Walk方法。在这篇中,我们来看一个更有效的相似函数——在图上随机游走的节点共现的概率。我们介绍随机游走背后的直觉,我们将…

中电文思海辉:塑造全球AI能力,持续强化诸多行业战略

【科技明说 | 重磅专题】 中电文思海辉以前就是叫文思海辉, 这是由之前两家上市软件外包公司文思信息和海辉软件合并而来,2018年当时各自股票以1:1的比例进行整合,双方股东各持有新公司50%的股权,合并后新公司名称为文…

私有云:【4】Esxi安装Server2012R2

私有云:【4】Esxi安装Server2012R2 1、使用Esxi安装虚拟机2、启动虚拟机3、安装必要服务及打补丁 1、使用Esxi安装虚拟机 选择esxi虚拟机挂在Win2012的镜像iso 使用Esxi客户端新建虚拟机 设置虚拟机名称及系统作为模板,如图所示 选择数据存储&#xff0…

mysql 增删改查基础命令

数据库是企业的重要信息资产,在使用数据库时,要注意(查和增,无所谓,但是删和改,要谨慎! ) 数据库管理系统(DBMS) :实现对数据的有效组织,管理和存取的系统软件 mysgl 数据库是一个系统, 是一个人机系统,硬件, gs,数据库…

软件设计师做题技巧(下午题)

第一题 数据流图 名词解释外部实体系统外部现实世界存在的物体 矩形表示数据存储一般都是数据库表名 矩形表示数据流数据如何在系统中流动和传输加工/数据处理系统的计算或者操作 圆角矩阵表示数据流图等级数据流图等级是指所涉及的数据项和处理的复杂程度 采用结构化语言对x…

【5G PHY】5G SS/PBCH块介绍(二)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

链式存储方式下字符串的replace(S,T1,T2)运算

链式存储方式下字符串的replace运算 ⭐️题目⭐️思路⭐️代码✨定义结点✨打印字符串函数✨计算字符串函数✨初始化字符串函数✨代码解读✨字符串替换函数✨字符串替换函数解读✨ 主函数✨完整代码 实现在链式存储下字符串的replace(S,T1,T2),来自课本习题的一道题…

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型,用户作为生产者,线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…

【计算机视觉】对极几何

文章目录 一、极线约束(Epipolar Constraint)二、相机标定过的情况三、相机没有标定过的情况四、八点算法(eight-point algorithm) 我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 在上一…

进行商城的测试用例设计思路是什么?

进行商城的测试用例设计时,可以考虑以下思路: 1. 功能测试:测试商城的基本功能是否正常工作,包括用户注册、登录、浏览商品、搜索商品、添加商品到购物车、下单、支付等。 2. 数据验证测试:验证商城中的数据是否正确…

深入浅出认识Kubernetes

用来管理容器,容器编排工具 容器化有助于打包软件来实现这些目标,从而使应用程序可以轻松快速地发布和更新,而无需停机。Kubernetes可帮助您确保那些容器化的应用程序在所需的位置和时间运行,并帮助他们找到工作所需的资源和工具。…

10阶杨辉三角

【任务需求】 定义一个函数,根据杨辉三角的数学概念,使用循环嵌套进行编写实现杨辉三角的关,并用for循环实现10阶杨辉三角,最后输出时需使10阶杨辉三角每行数字左右对称,按要求编写程序。 def triangle(rows):triang…

将数据文件,控制文件,日志文件分别放在不同的目录下,且数据库正常启动

一、定位数据文件、控制文件、日志文件的位置 注意:后序需要用到这些文件的位置,可以在查询完毕之后先截图保存 1.以管理员身份登录数据库 sqlplus / as sysdba2.查找数据文件位置 SELECT name FROM v$datafile;3.查找控制文件位置 SELECT name FROM …

设计模式:享元模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《原型模式》 下一篇《责任链模式》 简介: 享元模式,它是一种结构型设计模式,旨在有效地支持大量细粒度的对象共享,通过共享对象来减少内存消耗和…

【C++】缺省参数及函数重载

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1. 缺省参数1.1 缺省…

常见持久层框架赏析,到底是什么让你选择 MyBatis?

在绝大多数在线应用场景中,数据是存储在关系型数据库中的,当然,有特殊要求的场景中,我们也会将其他持久化存储(如 ElasticSearch、HBase、MongoDB 等)作为辅助存储。但不可否认的是,关系型数据库…

Ubuntu20.04操作系统安装及重中之重:系统分区

最近因为学习原因,需要将电脑设置为双系统,在windows10的系统下去安装Ubuntu操作系统。本来看网上相关的安装教程蛮多的,以为比较简单,结果一路过五关斩六将,坑的七零八落的,折腾了好久,才算安装…

【Java】LinkedList 集合

LinkedList集合特点 LinkedList 底层基于双向链表实现增删 效率非常高,查询效率非常低。 LinkedList源码解读分析 LinkedList 是双向链表实现的 ListLinkedList 是非线程安全的(线程是不安全的)LinkedList 元素允许为null,允许重复元素Linked…

基于 ARM+FPGA+AD的高精度数据采集系统设计

随着图像处理 、 工业控制 、 无线通信等领域的飞速发 展 , 对数据采集系统的速度 、 精度等性能要求也越来越高 。 这些要求都对数据采集系统的设计和实现提出了新的挑 战 。 目前数据采集系统的设计方案通常分为以下几类 : 1 &#xff0…

【持续交付】个人网站

今天给大家演示下如何基于Vuepress尝试持续交付博客网站。 也尝试过其他的方案,比如使用Typora导出html文件,并scp该文件到服务器上。 效果图 该持续交付主流程如下图 提交代码后会触发webHook生成version.txt,部署脚本每分钟轮询一次检测是否存在vers…