[二叉树] 二叉树的前中后三序遍历#知二求一

标题:[二叉树] 二叉树的前中后三序遍历#知二求一

@水墨不写bug

(图片来源于网络) 


 正文开始:

        其实这一类题就是考察对二叉树的结构理解,此类题目的二叉树一般通过数组传入,我们只需根据二叉树的就够特点对数组进行分区即可,其实这也是一个看递归的一个全新的视角,即将数组递归的分为 “根” “左区间” “右区间”,这一过程生动诠释了递归的特色。

        对于传入的数组,将其分为根,左区间,右区间。其中,左区间代表左子树,右区间代表右子树。

从整体上来说:

前序遍历分为:根——左区间——右区间;(根——左区间——右区间)

中序遍历分为:左区间——根——右区间;(左子树——根——右子树)

后序遍历分为:左区间——右区间——根;(左子树——右子树——根)

(一)知前序中序求后序(前+中->后)

        (1)已知某二叉树的前序遍历序列为5 7 4 9 6 2 1,中序遍历序列为4 7 5 6 9 1 2,则其后序遍历序列为( )

思路:

抓住前序三序遍历的特点:

        前序遍历的首元素就是二叉树的根;

        中序遍历的根的左右区间分别就是左子树和右子树;

        后序遍历的最后一个元素就是二叉树的根;

总结:

        前序和后序是用来获得根的,中序是用来根据根的相对位置来分别区分出左右区间(左右字数的);

 

接下来再通过解决例题(1)来验证一下结论:

        通过前序遍历找到子树的根,在中序遍历中找到根的位置,然后确定根左右子树的区间,即根的左侧为左子树中所有节点,根的右侧为右子树中所有节点。

故:根为: 5

        5的左子树:4 7   5的右子树: 6 9  1  2

        5的左子树的根为: 7  5的右子树的根为:9

        7的左子树: 4 7的右:空  9的左子树:6  9的右子树:2

故这棵树的结构为:

(二)知前序后序求中序(前+后->中)

        仅通过二叉树的前序遍历和后序遍历,我们不能唯一地确定一个二叉树的中序遍历结果,因为存在多种可能的二叉树结构满足相同的前序和后序遍历结果。

        前序遍历的顺序是:根节点 -> 左子树 -> 右子树
        后序遍历的顺序是:左子树 -> 右子树 -> 根节点

        但是,没有中序遍历(左子树 -> 根节点 -> 右子树)的信息,我们就无法准确地知道左子树和右子树各包含哪些节点,特别是当节点值可以重复时。

        然而,如果我们知道二叉树是满二叉树(每个节点都有两个子节点)或者是完全二叉树(除最后一层外,其他层都是满的,并且最后一层的节点都靠左排列),并且节点值不重复,那么在某些特定情况下,我们可能可以推断出中序遍历的结果。但这不是一般情况下的解决方案。

        对于一般情况,如果我们需要从前序和后序遍历中恢复二叉树(或中序遍历),我们需要额外的信息或使用更复杂的算法,如基于树的重建算法,但这通常涉及到递归的猜测和验证过程,且不一定总是可行的。

        所以,简单地说,仅通过前序和后序遍历,我们不能直接求出中序遍历的结果。

如果你对这一结论感兴趣,可以参考这篇文章来深入探究:

【数据结构与算法】"先序+后序"能否确定二叉树结构?一个简单的判别法 - 知乎 (zhihu.com)

(三)知中序后序求前序(中+后->前)

        已知某二叉树的中序遍历序列为JGDHKBAELIMCF,后序遍历序列为JGKHDBLMIEFCA,则其前序遍历序列为( )

        由后序遍历确定子树的根,后序遍历从后向前看,最后一个元素为根,和前序遍历刚好相反,从后向前看后序遍历,应该是根,右,左,根据中序遍历确定子树的左右区间

故:根为: A

        A的左子树:JGDHKB       A的右子树:ELIMCF

        A的左子树的根:B            A的右子树的根:C

        B的左子树:JGDHK  B的右子树:空  C的左子树:ELIM C的右子树:F

        B的左子树的根:D         C的左子树根:E

        D的左子树的根:G   D的右子树的根:H       E的右子树的根:I

故树的结构为:

 


完~

未经作者同意禁止转载 

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

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

相关文章

用例整体执行及pytest.ini文件

在我们写代码的过程中,一般都是右键或者命令行去执行一个用例 但是当我们写完后,需要整体执行一遍。那应该怎么搞呢? 我们可以在根目录下新建一个main.py或者run.py之类的文件,文件内容如下: if __name__ "__ma…

设计模式 基本认识

文章目录 设计模式的作用设计模式三原则设计模式与类图设计模式的分类 设计模式的作用 设计模式是在软件设计过程中针对常见问题的解决方案的一种通用、可重用的解决方案。设计模式提供了一种经过验证的方法,可以帮助开发人员解决特定类型的问题,并在软…

社区新零售:重构邻里生活圈,赋能美好未来

新时代的邻里脉动 在城市的肌理中,社区作为生活的基本单元,正经历一场由新零售引领的深刻变革。社区新零售,以其独特的商业模式、创新的技术手段和以人为本的服务理念,重新定义了社区商业的边界,重构了邻里生活的形态…

CANoe中周期事件报文的配置方法

方法记录,最近在配置测试环境时遇到了如下的问题: Q:在通信矩阵中该报文应该为CE型报文。但是在DBC中设置模式为CE型时就无法发送,trace中不会出现此报文,将它设置为周期型报文,就能正常在trace中出现。 A:DBC中不能…

安装ROS

前提必须是20.04版本。。。 一、首先,先设置安装源,我们选择国内中科大的安装源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ lsb_release -cs main" > /etc/apt/sources.list.d/ros-lat…

便携式iv检测仪解析

TH-PV31光伏电站便携式IV功率测试仪是一种专门用于光伏电站运维和故障排查的设备。它具备高精度、快速测试以及便携性等特点,成为光伏电站日常运维中不可或缺的工具。 首先,从工作原理来看,光伏电站便携式IV功率测试仪通过模拟太阳光照射光伏…

.NET C# ORM 瀚高数据库

SqlSugar ORM SqlSugar 是一款 老牌 .NET开源ORM框架,由果糖大数据科技团队维护和更新 ,开箱即用最易上手的ORM 优点 :【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】 【SqlSugar视频教程】 支持 &#xff1a…

go版本1.16.5 运行项目出现undefined: math.MaxInt报错

问题描述 go版本 go1.16.5 项目引用了 包go-sqlite3 v1.14.17 github.com/mattn/go-sqlite3 v1.14.17运行报错 # github.com/mattn/go-sqlite3 D:\GoPATH\pkg\mod\github.com\mattn\go-sqlite3v1.14.17\sqlite3_opt_serialize.go:41:26: undefined: math.MaxInt原因分析&…

行为型设计模式

一、责任链设计模式 (一)概念 使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 (二&#xf…

医院手术室麻醉信息管理系统源码 自动生成麻醉的各种医疗文书(手术风险评估表、手术安全核查表)

目录 手术风险评估表 一、患者基本信息 二、既往病史 三、手术相关信息 四、风险评估因素 五、风险评估结果 手术安全核查表 一、患者身份与手术信息核对 二、术前准备核查 三、手术团队与职责确认 四、手术物品与设备核查 五、术中关键步骤核查 六、术后核查 七…

亚马逊的Listing是否会导致店铺关联?

亚马逊账号关联是否有可能因为listing产品引起的呢?也会存在关联,但如果其中一个站点出了问题,另一账号跟着出事的情况不多见(因为亚马逊本来就支持卖家到各个站点开店把产品销售的各个区域)。很多客户有过相关的经验都…

11.JAVAEE之网络原理1

1.应用层(和程序员接触最密切) 应用程序 在应用层这里,很多时候, 都是程序员"自定义"应用层协议的,(当然,也是有一些现成的应用层协议)(这里的自定义协议,其实是非常简单的~~协议 >约定,程序员在代码中规定好,数据如何进行传输) 1.根据需求, 明确要传…

Netty: NIO网络编程

文章目录 一、NIO介绍二、NIO原理三、Buffer1、Buffer原理介绍2、Buffer实现类3、示例4、NIO和BIO的比较 四、Channel1、介绍2、FileChannel介绍3、Buffer和Channel的注意事项 五、Selector六、Selector、Channel和Buffer关系 一、NIO介绍 NIO介绍 二、NIO原理 NIO有三大核心…

使用 IPAM 解决方案简化分布式网络管理

随着组织在数字领域的全球扩张,分布式网络是不可避免的,这意味着,随着 IT 基础设施的发展,组织需要适应,这包括在不断增长的系统需求、应用程序堆栈、各种协议和安全防御中监控、现代化和简化流程和资源。在有效管理现…

Python新手入门基础英文笔记

1、字符串的操作 user:用户 name:名称/姓名 attibute:字段/属性 Value:值 2、重复/转换/替换/原始字符号 upper:上面 lower:下面 capitalize:用大写字母写或印刷 title:标题…

Leetcode—2739. 总行驶距离【简单】

2024每日刷题(121) Leetcode—2739. 总行驶距离 实现代码 class Solution { public:int distanceTraveled(int mainTank, int additionalTank) {int consume 0;int ans 0;while(mainTank ! 0) {mainTank--;consume;if(consume 5 && additio…

(5)步态识别论文研读——GaitDAN:基于对抗域适应的跨视角步态识别

GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation | IEEE Journals & Magazine | IEEE Xplore GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation 基于对抗与适应 摘要:视角变化导致步态外观存在显着差异。因…

刷代码随想录有感(50):路径总和

题干: 代码; class Solution { public:bool traversal(TreeNode* node, int count){if(node NULL)return false;if(!node -> left && !node -> right && count 0)return true;if(!node -> left && !node -> right &&…

一个类实现Mybatis的SQL热更新

引言 平时用SpringBootMybatis开发项目,如果项目比较大启动时间很长的话,每次修改Mybatis在Xml中的SQL就需要重启一次。假设项目重启一次需要5分钟,那修改10次SQL就过去了一个小时,成本有点太高了。关键是每次修改完代码之后再重…

C语言实验-循环结构和选择结构

一&#xff1a; 求和:1(14)(149)(14916)…(14916…n2)? 其中n的值由键盘输入&#xff1b; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int sum 0;int n 0;printf("请输入一个整数");scanf("%d", &n);for (int i 0; i &l…