【数据结构】树与二叉树(四):满二叉树、完全二叉树及其性质

news2024/11/17 5:46:02

文章目录

5.1 树的基本概念

5.1.1 树的定义

  • 一棵树是结点的有限集合T:
    • 若T非空,则:
      • 有一个特别标出的结点,称作该树的,记为root(T);
      • 其余结点分成若干个不相交的非空集合T1, T2, …, Tm (m>0),其中T1, T2, …, Tm又都是树,称作root(T)的子树
    • T 空时为空树,记作root(T)=NULL。

5.1.2 森林的定义

  一个森林是0棵或多棵不相交(非空)树的集合,通常是一个有序的集合。换句话说,森林由多个树组成,这些树之间没有交集,且可以按照一定的次序排列。在森林中,每棵树都是独立的,具有根节点和子树,树与树之间没有直接的连接关系。
  森林是树的扩展概念,它是由多个树组成的集合。在计算机科学中,森林也被广泛应用于数据结构和算法设计中,特别是在图论和网络分析等领域。
在这里插入图片描述

5.1.3 树的术语

  • 父亲(parent)、儿子(child)、兄弟(sibling)、后裔(descendant)、祖先(ancestor)
  • 度(degree)、叶子节点(leaf node)、分支节点(internal node)
  • 结点的层数
  • 路径、路径长度、结点的深度、树的深度

参照前文:【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度

5.1.4 树的表示

  • 【数据结构】树与二叉树(二):树的表示C语言:树形表示法、嵌套集合表示法、嵌套括号表示法 、凹入表示法

5.2 二叉树

5.2.1 二叉树

1. 定义

  二叉树是一种常见的树状数据结构,它由结点的有限集合组成。一个二叉树要么是空集,被称为空二叉树,要么由一个根结点和两棵不相交的子树组成,分别称为左子树右子树。每个结点最多有两个子结点,分别称为左子结点和右子结点。
在这里插入图片描述

2. 特点

  二叉树的特点是每个结点最多有两个子结点,并且子结点的位置是有序的,即左子结点在前,右子结点在后。这种有序性使得二叉树在搜索、排序等算法中有广泛的应用。

  • 在二叉树中,根结点是整个树的起始点,通过根结点可以访问到整个树的其他结点。每个结点都可以看作是一个独立的二叉树,它的左子树和右子树也是二叉树。

  • 二叉树可以是空树,也可以是只有根结点的树,或者是由多个结点组成的树。每个结点可以包含一个数据元素,以及指向左子结点和右子结点的指针。

  • 二叉树的形状可以各不相同,它可以是平衡的或者不平衡的,具体取决于结点的分布情况。在二叉树中,每个结点的左子树和右子树都是二叉树,因此可以通过递归的方式来处理二叉树的操作。

3. 性质

引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i0
引理5.2:高度为k的二叉树中至多有 2 k + 1 − 1 2^{k+1}-1 2k+11个结点,其中 k ≥ 0 k \geq 0 k0
引理5.3:设T是由n个结点构成的二叉树,其中叶结点个数为 n 0 n_0 n0,度数为2的结点个数为 n 2 n_2 n2,则有 n 0 = n 2 + 1 n_0 = n_2 + 1 n0=n2+1

详细证明过程见前文:【数据结构】树与二叉树(三):二叉树的定义、特点、性质及相关证明

4. 满二叉树

定义

在这里插入图片描述

  定义5.3:一棵非空高度为 k ( k ≥ 0 ) k( k≥0) k(k0)满二叉树(perfect binary tree),是有 2 k + 1 − 1 2^{k+1}-1 2k+11个结点的二叉树。

特点

  满二叉树是一种特殊类型的二叉树,具有以下特点:

  1. 叶结点都在第 k k k层上:满二叉树的高度为 k k k,即最深层的层数为 k k k。所有的叶结点都位于最深层,也就是第 k k k层。

  2. 每个分支结点都有两个子结点:满二叉树中的每个非叶结点都有两个子结点。也就是说,每个结点要么是叶结点,要么有两个子结点。

  3. 叶结点的个数等于非叶结点个数加1:满二叉树中的叶结点个数(记为 n 0 n_{0} n0)与非叶结点个数(记为 n 1 n_{1} n1)之间满足关系 n 0 = n 1 + 1 n_{0} = n_{1} + 1 n0=n1+1。也就是说,叶结点的个数比非叶结点的个数多1。

  根据定义5.3,一棵非空高度为 k k k的满二叉树具有 2 k + 1 − 1 2^{k+1} - 1 2k+11个结点。这个结论可以通过归纳法证明。当 k = 0 k=0 k=0时,满二叉树只有一个结点,符合条件。假设对于某个正整数 k k k,高度为 k k k的满二叉树有 2 k − 1 2^{k} - 1 2k1个结点。那么对于高度为 k + 1 k+1 k+1的满二叉树,根结点有两个子结点,每个子结点都是高度为 k k k的满二叉树。根据归纳假设,每个子树都有 2 k − 1 2^{k} - 1 2k1个结点,所以总共有 2 ⋅ ( 2 k − 1 ) + 1 = 2 k + 1 − 1 2 \cdot (2^{k} - 1) + 1 = 2^{k+1} - 1 2(2k1)+1=2k+11个结点。因此,高度为 k + 1 k+1 k+1的满二叉树有 2 k + 1 − 1 2^{k+1} - 1 2k+11个结点。(引理5.2)
  可按层次顺序(即按从第0层到第k层,每层由左向右的次序)将一棵满二叉树的所有结点用自然数从1开始编号。例如:

        1
       / \
      2   3
     / \ / \
    4  5 6  7
   /\ /\ /\ /\
  8 9 A B C D E

  根据上述满二叉树的编号规律,节点的编号如下:

0层:11层:2, 32层:4, 5, 6, 73层:8, 9, A, B, C, D, E

  这里使用了十六进制数字A到E来表示编号大于9的节点。这样,高度为3的满二叉树的所有节点共有 2 4 − 1 = 15 2^4-1=15 241=15个节点,按照层次顺序从1到15进行编号。

5. 完全二叉树

定义

  定义5.4:一棵包含 n n n个节点、高度为 k k k的二叉树 T T T,当按层次顺序编号 T T T的所有节点,对应于一棵高度为 k k k的满二叉树中编号由1至 n n n的那些节点时, T T T被称为完全二叉树(complete binary tree)

  换句话说,完全二叉树是按照层次顺序从左到右依次填满节点的二叉树,除了最后一层可能不满外,其他层都必须是满的。在完全二叉树中,节点编号与高度为 k k k的满二叉树中的节点编号一一对应。

下面是一个例子来说明完全二叉树的概念:

        1
       / \
      2   3
     / \  /
    4  5 6

  在上面的例子中,这棵二叉树有6个节点,高度为2。按照层次顺序编号,节点的编号与高度为2的满二叉树中的节点编号一一对应。完全二叉树在树的存储和遍历等操作中具有一些特殊的性质,因此在算法和数据结构中经常被使用。

特点
  • 树中只有最下面两层节点的度可以小于2
    • 这意味着在完全二叉树中,除了最后一层和倒数第二层的节点可以是度小于2的节点(即叶节点或只有一个子节点),其他层的节点都必须是度为2的节点(具有两个子节点)。
  • 树中最下面一层的节点都集中在该层最左边的若干位置上(满二叉树意义上)
    • 在完全二叉树中,最后一层的节点从左到右依次排列,不会有空缺。
  • 树中叶节点只能在层数最大的两层上出现,即存在一个非负整数 k k k使得树中每个叶节点或在第 k k k层或第 k + 1 k+1 k+1层上
    • 这意味着在完全二叉树中,叶节点只能出现在最底层和倒数第二层上。其他层不会有叶节点。
  • 对树中所有节点,按层次顺序,用自然数从1开始编号,仅编号最大的非叶节点可以没有右儿子,其余非叶节点都有两个儿子节点
    • 在完全二叉树中,除了编号最大的非叶节点可能只有一个子节点(左子节点),其他非叶节点都必须有两个子节点(左子节点和右子节点)。
  • 树中所有节点对应于高度为 k k k的满二叉树中编号由1至 n n n的那些节点:
    • 这是完全二叉树的定义,完全二叉树的节点编号与高度为 k k k的满二叉树中的节点编号一一对应。

  这些特点描述了完全二叉树的一些重要性质和规律。完全二叉树在算法和数据结构中经常被使用,因为它的结构相对简单,可以方便地进行存储和遍历等操作。

引理5.4

  将一棵有 n n n个节点的完全二叉树按层次顺序用自然数从1开始编号时,节点编号 i i i的结点满足的性质:

① 若 i ≠ 1 i\neq1 i=1,则编号为 i i i的结点的父节点的编号为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2。即除了根节点(编号为1)之外,其他节点的父节点的编号可以通过将节点编号除以2并向下取整得到。

② 若 2 i ≤ n 2i\leq n 2in,则编号为 i i i的结点的左子节点的编号为 2 i 2i 2i。这意味着如果节点编号的两倍小于等于总节点数 n n n,则该节点有左子节点,且左子节点的编号为节点编号的两倍。

③ 若 2 i + 1 ≤ n 2i+1\leq n 2i+1n,则编号为 i i i的结点的右子节点的编号为 2 i + 1 2i+1 2i+1。这意味着如果节点编号的两倍加一小于等于总节点数 n n n,则该节点有右子节点,且右子节点的编号为节点编号的两倍加一。

  这些性质描述了完全二叉树中节点编号与父节点、左子节点和右子节点编号之间的关系。通过这些性质,可以方便地在完全二叉树中定位和访问特定节点的父节点、左子节点和右子节点。

  证明完全二叉树性质②的正确性可以通过归纳法进行:

  • 首先,当 i = 1 i=1 i=1时,如果 n ≥ 2 n\geq2 n2,则左儿子的编号显然为2。这是基本情况。

  • 假设对于所有 1 ≤ j ≤ i 1\leq j\leq i 1ji,且 2 i ≤ n 2i\leq n 2in,节点 j j j的左儿子的编号为 2 j 2j 2j。现在要证明节点 j = i + 1 j=i+1 j=i+1的左儿子的编号为 2 ( i + 1 ) 2(i+1) 2(i+1)

  • 根据完全二叉树的性质,如果 2 ( i + 1 ) ≤ n 2(i+1)\leq n 2(i+1)n,则节点 i + 1 i+1 i+1有左儿子。根据层次顺序的编号规则,节点 i + 1 i+1 i+1的左儿子之前的两个节点就是节点 i i i的左儿子和右儿子。根据归纳假设,节点 i i i的左儿子编号为 2 i 2i 2i,因此节点 i i i的右儿子编号为 2 i + 1 2i+1 2i+1。因此,节点 i + 1 i+1 i+1的左儿子的编号为 2 i + 2 = 2 ( i + 1 ) 2i+2=2(i+1) 2i+2=2(i+1)

  • 通过归纳法,我们证明了对于所有 1 ≤ i ≤ n 1\leq i\leq n 1in,若 2 i ≤ n 2i\leq n 2in,则节点 i i i的左儿子的编号为 2 i 2i 2i

  由于性质②可以直接推导出性质③,而性质②和③又可以得到性质①,所以这个证明也同时证明了性质③和①。

引理5.5 具有n个结点的完全二叉树的高度是⌊𝑙𝑜𝑔2𝑛⌋ .

证明:
  设完全二叉树的高度为 k k k。根据定义5.4,完全二叉树的结点个数介于高度为 k k k k − 1 k-1 k1的满二叉树的结点数之间,即有 2 k − 1 < n ≤ 2 k + 1 − 1 2^k - 1 < n \leq 2^{k+1} - 1 2k1<n2k+11

从而,我们可以得到 2 k ≤ n ≤ 2 k + 1 − 1 2^k \leq n \leq 2^{k+1} - 1 2kn2k+11,即 k ≤ log ⁡ 2 n < k + 1 k \leq \log_2 n < k+1 klog2n<k+1

由于高度 k k k为整数,所以我们可以得到 k = ⌊ log ⁡ 2 n ⌋ k = \lfloor \log_2 n \rfloor k=log2n

因此,具有 n n n个结点的完全二叉树的高度是 ⌊ log ⁡ 2 n ⌋ \lfloor \log_2 n \rfloor log2n

思考:完全二叉树和满二叉树是什么关系?

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

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

相关文章

【git】TortoiseGit图标不显示 及 文件夹中.git文件夹不显示

&#xff08;一&#xff09;文件夹中.git文件夹不显示 在 文件夹选项-查看-高级设置 中&#xff0c; 将 隐藏文件和文件夹中的不显示&#xff0c;标记为“显示隐藏的文件、文件夹和驱动器” &#xff08;二&#xff09;TortoiseGit图标不显示 【情况一】是否有正确安装 Tort…

【STM32-DSP库的使用】基于Keil5 + STM32CubeMX 手动添加、库添加方式

STM32-DSP库的使用 一.CMSIS-DSP1.1 DSP库简介1.2 支持的函数类别1.3 宏定义 二、操作2.1 STM32CubeMX 配置基本工程2.2 Lib库的方式实现(推荐)2.3 手动添加DSP文件&#xff08;可以下载官方最新库&#xff0c;功能齐全&#xff09; 三、MFCC测试DSP加速效果 为验证语音识别MFC…

wait()和notify()

线程的状态 状态是针对当前线程调度的情况来描述的,也可以认为线程是调度的基本单位,在Java中对线程的状态进行了细化,主要分为下面几种状态 ★ 1.NEW 创建了Thread对象,但是还没有调用start ★ 2. TERMINATED 表示内核中的pcb已经执行完了,但是Thread对象还在. ★ 3. RUNNA…

初识微服务技术栈

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构&#xff0c;这些架构之间有怎样的差别呢&#xff1f; 导学&#xff1a; 了解微服务的优缺点&#xff1b;了解微服务架构的演变过程&am…

分布式任务调度(00)--Quartz

1 任务调度整体流程 2 组件 调度器 &#xff1a;工厂类创建Scheduler&#xff0c;根据触发器定义的时间规则调度任务任务&#xff1a;Job表示被调度的任务触发器&#xff1a;Trigger 定义调度时间的元素&#xff0c;按啥时间规则执行任务。一个Job可被多个Trigger关联&#xf…

ps人像怎么做渐隐的效果?

photoshop怎么制作人像渐隐的图片效果&#xff1f;渐隐效果需要使用渐变来实现&#xff0c;下面我们就来看看详细的教程。 首先&#xff0c;我们打开Photoshop&#xff0c;点击屏幕框选的【打开】&#xff0c;打开一张背景图片。 下面&#xff0c;我们点击左上角【文件】——【…

centos7安装jdk-阿里云服务器

1.背景 2.安装步骤 步骤:(特别注意:虚拟机安装的一般是32位的操作系统,jdk也必须使用32位的) 查看虚拟机版本:sudo uname --m i686 //表示是32位 x86_64 // 表示是64位 查看是否已经安装jdk 看看 是否设置了jdk环境变量: echo $JAVA_HOME&#xff1b; 或运行命令&#xff1a; …

文件换行符导致linux里运行python文件找不到文件

现象 运行python代码的时候&#xff1a; 报错信息&#xff1a; : No such file or directoryon3 解决方法 在pycharm中把文件的分隔符给改了 这样&#xff0c;把文件的分隔符改成Unix and macOS就可以了

移远EC600U-CN开发板 day01

1.官方文档快速上手&#xff0c;安装驱动&#xff0c;下载QPYcom QuecPython 快速入门 - QuecPython (quectel.com)https://python.quectel.com/doc/Getting_started/zh/index.html 注意&#xff1a; &#xff08;1&#xff09;打开开发板步骤 成功打开之后就可以连接开发板…

起重机远程监控解决方案

起重机远程监控方案 门式起重机作为大型吊装设备&#xff0c;具有机器体积大、作业范围广、组合工况多等特点。在实际生产与吊装过程中&#xff0c;由于场地环境复杂、各类材料和结构件随处可见&#xff0c;在门式起重机作业中极易出现起重机构过载、吊装物品碰撞等问题。 一、…

Web服务器实战

网站需求 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于www.openlab.com/student 网站访问学生信息&#xff0c;www.openlab.com/data网站访问教学资料 www…

DDD领域模式的模块层级及其依赖关系

DDD领域模型设计是一种常用的软件设计模式,它强调将业务逻辑和数据模型放在最核心的位置,以便更好地满足业务需求。在DDD领域模型设计中,应用程序被分为四个层次:用户界面层、应用服务层、领域模型层和基础设施层。 层次 用户界面层(Presentation Layer) 作为用户和应…

思维训练4

题目描述1 Problem - A - Codeforces 题目分析 对于此题我们要求差值种类最大&#xff0c;故我们可以构造出相邻差值分别为1&#xff0c;2&#xff0c;3...由于n规定了最大的范围故我们增到一定的差值之后其差值必定为之前出现过的数字&#xff0c;但由于要保证数组呈递增趋势…

java项目之线上教学平台(springboot框架)

项目简介 线上教学平台实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、学员管理、资料类型管理、学习资料管理、交流论坛、我的收藏管理、试卷管理、留言板管理、试题管理、系统管理、考试管理。学员&#xff1a;首页、个人中心、我的收藏管理、留言板管理、…

优思学院|APQP(先期产品质量规划)简介

在汽车行业&#xff0c;APQP Advanced Product Quality Planning&#xff08;先期产品质量规划&#xff09;&#xff0c;是一种常用的质量规划指南和工具&#xff0c;但它同样适用于其他行业。APQP是汽车国际行动组织&#xff08;AIAG&#xff09;提出的一种方法&#xff0c;用…

百数低代码与AI:实现业务智能化的新途径

今年6月&#xff0c;咨询机构麦肯锡发布了的一份题为《生成式人工智能的经济潜力》的研究报告&#xff0c;在报告中&#xff0c;分析师们通过对47个国家及地区的850种职业&#xff08;全球80%以上劳动人口&#xff09;的研究&#xff0c;探讨了在AI成指数级发展背后&#xff0c…

【云原生】使用nginx反向代理后台多服务器

背景 随着业务发展&#xff0c; 用户访问量激增&#xff0c;单台服务器已经无法满足现有的访问压力&#xff0c;研究后需要将后台服务从原来的单台升级为多台服务器&#xff0c;那么原来的访问方式无法满足&#xff0c;所以引入nginx来代理多台服务器&#xff0c;统一请求入口…

在idea命令行,or linux 终端执行命令,快速获取通过脚本上证指数、创业板实时行情

脚本编写 编写shell脚本如下,并保存命名为stock curl http://hq.sinajs.cn/list=s_sh000001 -H User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 -H Accept: */* -H Accept-Language: en-US,en;q=0.5 --compressed -H Referer…

SIEM 体系结构的组件

安全信息和事件管理&#xff08;SIEM&#xff09;软件可帮助 IT 安全专业人员保护其企业网络免受网络攻击&#xff0c;SIEM 解决方案从组织中的所有基础结构组件收集日志数据&#xff0c;为安全专业人员提供实时数据和对网络活动的见解。 网络的内部视图可以帮助您识别和预防威…

热像仪:使用 ESP32 和 MLX90640 传感器设计您自己的红外成像设备

本文详细介绍如何设计一款基于ESP32的热成像仪,文末包含完整的原理图,PCB,3D文件,程序源码的免费下载链接 使用 ESP32 和 MLX90640 传感器 DIY 热像仪 热像仪广泛应用于各种工业应用,例如热性能监控、检测温度异常、热基准测试等。我们甚至将热成像用于国防和军事应用。我…