【数据结构(邓俊辉)学习笔记】二叉树03——重构

0 .概述

介绍下二叉树重构

1. 遍历序列

任何一棵二叉树我们都可以导出先序、中序、后序遍历序列。这三个序列的长度相同,他们都是由树中的所有节点依照相应的遍历策略所确定的次序,依次排列而成。

若已知某棵树的遍历序列是否可以忠实地还原出这棵树地拓扑结构?什么情况下可以?什么情况下不可以?如果可以,具体又应该使用什么方法?

2. 先序 | 后序 + 中序

结论:只需中序遍历序列再加上先序与后序遍历序列之一,即可忠实还原二叉树地完整拓扑结构。
在这里插入图片描述
对于上述结论做证明,为此需要做数学归纳

假设对于规模小于N地所有二叉树这个规律都是成立的,接下来考虑规模恰好为N的二叉树。
不失一般性,可以将二叉树画成上图所示的样子。
先序遍历序列:r L R
中序遍历序列:L r R
因此根据先序遍历可以明确树根节点是谁,进而可以在中序遍历序列中对这个节点进行定位。这个定位非常重要,它使我们得以确认左子树所对应的中序遍历子序列,以及右子树所对应的中序遍历子序列。也就是说我们可以知道左子树和右子树分别是由哪些节点组成。因此只要这两个遍历序列是合法的,反过来在先序遍历序列中就可以很容易地将左子树和右子树所对应地遍历子序列切分开。
~  
这样成功地将原来全树地重构问题,化解为两棵子树地重构问题。不难看出,这两棵子树在规模上都符合归纳假设,也就是它们都严格地小于N,因此根据归纳假设无论是左子树还是右子树的确都可以如此重构出来。

注意:无论是左子树还是右子树都有可能是空树,这种情况下树的规模应该是0。

不借助中序遍历序列,而只凭借先序和后序遍历序列,是否也能保证完成对左右子树地正确切分呢?答案是不能保证的。

原因是无论L 还是R都有可能是空树,比如右子树是空的,那么它对应的遍历:
先序遍历序列 r L
后序遍历序列 L r
反过来若左子树是空的,那么它对应的遍历:
先序遍历序列 r R
后序遍历序列 R r
可以看到这里出现了歧义,我们无法根据先序遍历序列以及后序遍历序列来区分在这种情况下,除去根节点之后的部分究竟是左子树还是右子树。

3. [先序 + 后序 ] x 真

在这里插入图片描述
由先序和后序遍历序列的确也可以还原树的整体结构。比如对于所谓的真二叉树就是这样。
所谓的真二叉树,其中每个节点的度数都必须是偶数,确切说是除了0就是2度,而1度节点是严格禁止的。因此非退化的真二叉树模式无非如上图。注意,此时的左子树和右子树要么同时为空要么同时非空,前一种情况显而易见,因此不妨假设他们都存在。于是这棵树的遍历先序遍历序列和后序遍历序列如下。
在这里插入图片描述
左子树的树根节点 l 在先序遍历序列中必然名列第二,位置是确定的,因此反过来,在任何给定的先序遍历序列中都可以便捷地找到它,进而在后序遍历序列中对它进行定位。这个节点在它所属地这棵子树地后序遍历子序列中必然垫后。这就意味着可以明确地界定左右子树范围。即左子树由哪些节点构成,右子树由哪些节点构成都是可以确定的。当然对称的,在后序遍历序列中,右子树的树根位置也是确定的,因此通过右子树的树根节点依然可以反过来在先序遍历序列中进行定位,而且同样地可以确定,左右子树地切分位置。
在这里插入图片描述
通过上述描述确实可以进行分而治之,从而通过递归的形式,完整地重构出一棵真二叉树。

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

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

相关文章

ic基础|时钟篇05:芯片中buffer到底是干嘛的?一文带你了解buffer的作用

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是…

图片AI高效生成惊艳之作,一键解锁无限创意,轻松打造概念艺术新纪元!

在数字化时代,图片已经成为我们表达创意、传递信息的重要载体。然而,传统的图片生成方式往往耗时耗力,无法满足我们对于高效、创意的需求。幸运的是,现在有了图片AI,它以其高效、智能的特点,为我们带来了全…

微服务-系统架构

微服务: 系统架构的演变 单一应用架构 早期的互联网应用架构,大量应用服务 功能 集中在一个包里,把大量的应用打包为一个jar包,部署在一台服务器,例如tomcat上部署Javaweb项目 缺点:耦合度高,一台服务器…

Point-Nerf 理论笔记和理解

文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些?什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…

Linux(六)

Linux(六) 自定义头文件自定义头文件中写什么如何引入头文件条件编译条件编译作用 gcc工作原理Make 工作管理器什么是Make什么是Makefile/makefileMakefile假目标Makefile中的变量自定义变量预定义变量自动变量 Makefile中变量展开方式递归展开方式简单展…

2024攻防演练利器之必修高危漏洞合集

随着网络安全的发展和攻防演练工作的推进,红蓝双方的技术水平皆在实践中得到了很大的提升,但是数字化快速发展也导致了企业的影子资产增多,企业很多老旧系统依旧存在历史漏洞,与此同时,在攻防演练期间,往往…

利用EAS自动生成数据模型和sql脚本

EAS适用于敏捷开发中小系统,这节主要讲解EAS对应的模型和数据库脚本输出应用。 在这个应用程序中,用户可自定义实体模型和枚举模型,只要选择相应的实体或者枚举进行右击添加即可。 解决方案参数设定,在解决方案的设定中可设置项目名称、通用语言,命名空间和输出位置。 连…

C语言系列文章 | 函数 (共 10209 字)

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 目录 函数的概念库函数自…

设计软件有哪些?建模和造型工具篇(1),渲染100邀请码1a12

之前我们介绍的都是渲染软件,但对于设计师来说建模和造型是在渲染之前,所以从现在开始,我们会介绍一批建模和造型工具。 1、ZBrush ZBrush是由Pixologic公司开发的数字雕刻和绘画软件,专为艺术家和设计师而设计。它结合了3D建模…

抖店如何打造出爆品?学好这几招,轻松打爆新品流量

大家好,我是电商花花。 近年来,抖店商家越来越多,而选品,爆品就是我们商家竞争的核心了,谁能选出好的新品,打造出爆品,谁的会赚的多,销量多。 做抖音小店想出单,想赚钱…

转置卷积简明教程

转置卷积层也被(错误地)称为反卷积层。反卷积层反转了标准卷积层的操作,即如果对通过标准卷积层生成的输出进行反卷积,则会返回原始输入。转置卷积层与反卷积层相似,因为两者生成的空间维度相同。转置卷积不是通过值反…

Java+Spring Boot +MySQL + MyBatis Plus一款数字化管理平台源码:云MES系统

JavaSpring Boot MySQL MyBatis Plus一款数字化管理平台源码:云MES系统 MES是为企业提供制造全过程的信息化产品,支持企业智能制造。MES可实现与企业的ERP、PDM等其他信息化系统进行无缝连接,也可与现场生产设备进行连接、数据采集&#xff…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第29课-会员制展厅

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第29课-会员制展厅 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

$subcribe的使用

$subcribe的使用 只要是store都有$subscribe函数,是订阅的意思,可以监测到store中数据的变化 使用$subscribe函数可以实现刷新不丢失,将数据保存到浏览器的本地存储中,每次进入页面都使用localStorage的数据填充页面

手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享

背景:书接上回,一站式安装Ubuntu及配置服务器手把手教学,一站式安装ubuntu及配置服务器-CSDN博客 在安装及配置好服务器后,因为课题组可能涉及多个用户共用一台服务器,为了防止服务器上代码误删和Anaconda环境管理混乱…

⌈ 传知代码 ⌋ 实现沉浸式交互故事体验

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

批量漏洞挖掘思路小结

漏洞挖掘是指对应用程序中未知漏洞的探索,通过综合应用各种技术和工具,尽可能地找出其中的潜在漏洞。一般情况下漏洞挖掘针对单一的应用系统,通过端口扫描、目录扫描、文件扫描等方式对其安全性进行评估,而本文主要针对Nday和1day…

零基础的粉丝有福了:逐键提示盲打更轻松

盲打就是不看键盘去打字,对于零基础的粉丝而言,盲打入门通常都是很难的,今天就给大家放个福利:从今天开始就能盲打,3天之后盲打就入门了。 真的有这么简单吗?是的,跟着我做就可以了。 首先&am…

【MinIO学习】

OSS Docker podman MinIO服务器 MinIO客户端 Bucket Object 时间同步 The difference between the request time and the servers time is too large。 URL