【数据结构】树与二叉树(三):二叉树的定义、特点、性质及相关证明

news2024/10/7 13:24:10

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

    • 这个引理描述了二叉树中叶结点和度数为2的结点之间的关系,即叶结点的数量比度数为2的结点数量多1。
引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i0

在这里插入图片描述

  证明:使用数学归纳法。

基础步骤: i = 0 i=0 i=0 时,仅有一个根结点,其层数为0。因此,第0层上至多有 2 0 = 1 2^0=1 20=1 个结点。因此,当 i = 0 i=0 i=0 时,引理成立。

归纳假设: 假设当 i = j i=j i=j ( j ≥ 0 ) (j\geq0) (j0) 时,二叉树中第 j j j 层上至多有 2 j 2^j 2j 个结点。

归纳步骤: 考虑第 j + 1 j+1 j+1 层上的结点个数。对于任意一个结点,其子结点个数最多为2。根据归纳假设,第 j j j 层上至多有 2 j 2^j 2j 个结点。因此,第 j + 1 j+1 j+1 层上的结点个数最多为 2 × 2 j = 2 j + 1 2\times2^j=2^{j+1} 2×2j=2j+1 个结点。

  因此,根据数学归纳法,对于任意非负整数 i i i,二叉树中层数为 i i i 的结点至多有 2 i 2^i 2i 个。

证毕

引理5.2:高度为k的二叉树中至多有 2 k + 1 − 1 2^{k+1}-1 2k+11个结点,其中 k ≥ 0 k \geq 0 k0

  对于高度为k的二叉树,我们可以计算每一层的最大结点数,并将它们相加来得到总结点数的上界。根据引理5.1,第 i i i层上至多有 2 i 2^i 2i个结点。那么,第 0 0 0层至第 k k k层的结点数上界可以表示为:
2 0 + 2 1 + 2 2 + . . . + 2 k 2^0 + 2^1 + 2^2 + ... + 2^k 20+21+22+...+2k

  这是一个等比数列的和,可以使用等比数列求和公式进行计算。等比数列的求和公式为:

S = a ∗ ( r n − 1 ) / ( r − 1 ) S = a * (r^n - 1) / (r - 1) S=a(rn1)/(r1)

其中,S表示数列的和,a是首项,r是公比,n是项数。

  在我们的情况下,首项a=1,公比r=2,项数n=k+1。将这些值代入公式中,我们可以得到:

2 0 + 2 1 + 2 2 + . . . + 2 k = 1 ∗ ( 2 k + 1 − 1 ) / ( 2 − 1 ) = 2 k + 1 − 1 2^0 + 2^1 + 2^2 + ... + 2^k =1 * (2^{k+1} - 1) / (2 - 1) = 2^{k+1} - 1 20+21+22+...+2k=1(2k+11)/(21)=2k+11

因此,高度为k的二叉树中至多有2^(k+1) - 1个结点。

证毕

  • 问题1:高度为k (k≥1)的二叉树中至少有多少个结点?k+1
  • 问题2:含有k (k≥1)个结点的二叉树高度至多为多少? k-1
引理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

  设T是由 n n n个结点构成的二叉树,其中叶结点个数为 n 0 n_{0} n0,次数为2的结点个数为 n 2 n_{2} n2

  根据引理5.3的前提条件,我们有以下等式:

n = n 0 + n 1 + n 2        ( 5 − 1 ) n = n_{0} + n_{1} + n_{2}       (5-1) n=n0+n1+n2      (51)

其中, n 1 n_{1} n1是T中次数为1的结点个数。

  另一方面,设二叉树T的边的个数为 E E E。除了根结点外,每个结点和其父结点之间都有且仅有一条边,即一个结点对应一条边。因此,结点的个数 n n n比边的个数 E E E多1(根结点不对应边),即:

n = E + 1           ( 5 − 2 ) n = E + 1          (5-2) n=E+1         (52)

  另外,从另一个角度来看,次数为1的结点对应一条边,次数为2的结点对应两条边。因此,边的个数 E E E可以表示为:

E = n 1 + 2 n 2          ( 5 − 3 ) E = n_{1} + 2n_{2}        (5-3) E=n1+2n2        (53)

  我们将(5-1)、(5-2)和(5-3)联立起来,通过求解这个方程组,我们可以得到 n 0 = n 2 + 1 n_{0} = n_{2} + 1 n0=n2+1,即二叉树T中的叶结点个数 n 0 n_{0} n0为次数为2的结点个数 n 2 n_{2} n2加1。

证毕

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

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

相关文章

yolov5--ptq--qat量化之敏感层分析

敏感层分析,应该是发生在ptq量化之前进行分析的操作,经过该操作,可得出哪些层不适合进行量化,则在接下来ptq时可以手动关闭这些层的量化。 进入敏感层分析函数sensitive_analysis中, 具体流程为: 首先验证…

打印机共享连接0x000003e3错误

重点重点:如使用下面教程还不行的朋友,请这样操作。 不管主机还是客户机,都运行“局域网共享一键修复工具”,并选择“简单共享(无密码)” 不管主机还是客户机,都操作一次此教程。 不管主机还是客…

Langchain-Chatchat项目:5.1-ChatGLM3-6B工具调用

在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在10B以下的基础模型中最强的性能。ChatGLM3-6B采用了全新设计的Prompt格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码…

如何用思维导图拆书

思维导图是一种非常有用的工具,可以被广泛应用于不同领域的人群。 阅读是我们获取知识和提升自己的重要途径,而做好读书笔记有助于加深对书中内容的理解和记忆。其中,使用思维导图作为读书笔记的工具,不仅能够帮助我们更好地整理…

lombok依赖介绍(帮助我们消除冗长代码,如get,set方法)

前言 lombok 是一个 Java 工具库,通过注解的方式,简化 Java 开发。要想使用 lombok 中的注解,我们需要先引入依赖,推荐看idea必装插件EditStarters(快速引入依赖),lombok是⼀款在编译期⽣成代码…

k8s提交spark应用消费kafka数据写入elasticsearch7

一、k8s集群环境 k8s 1.23版本,三个节点,容器运行时使用docker。 spark版本时3.3.3 k8s部署单节点的zookeeper、kafka、elasticsearch7 二、spark源码 https://download.csdn.net/download/TT1024167802/88509398 命令行提交方式 /opt/module/spark…

技术分享 | 被测项目需求你理解到位了么?

需求分析是开始测试工作的第一步,产品会先产出一个需求文档,然后会组织需求宣讲,在需求宣讲中分析需求中是否存在问题,然后宣讲结束后,通过需求文档分析测试点并且预估排期。所以对于需求的理解非常重要。 需求文档 …

壹[1],QT自定义控件创建(QtDesigner)

1,环境 Qt 5.14.2 VS2022 原因:厌烦了控件提升的繁琐设置,且看不到界面预览显示。 2,QT制作自定义控件 2.1,New/其他项目/Qt4 设计师自定义控件 2.2,设置项目名称 2.3,设置 2.4,设…

YOLOv7改进策略:一种新颖的可扩张残差(DWR)注意力模块,增强多尺度感受野特征,助力小目标检测

💡💡💡本文全网首发独家改进:一种新颖的可扩张残差(DWR)注意力模块,加强不同尺度特征提取能力,创新十足,独家首发适合科研 推荐指数:五星 DWR | 亲测在多个数据集能够实现涨点,多尺度特性在小目标检测表现也十分出色。 💡💡💡Yolov5/Yolov7魔术师,独…

【Java 进阶篇】Cookie 使用详解

欢迎阅读本篇博客,我们将深入研究 Java 中的 Cookie,从入门到精通,包括 Cookie 的基本概念、原理、使用方法以及一些高级技巧。无论你是新手还是有经验的开发者,希望这篇博客对你有所帮助。 第一部分:Cookie 是什么&a…

网络原理---封装和分用

文章目录 什么是封装和分用?封装应用层传输层网络层数据链路层物理层 分用物理层数据链路层网络层传输层应用层 什么是封装和分用? 我们前面讲过协议会分层,每一层都有各自的功能。而在数据传输的过程中,得按照顺序把每一层协议都…

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

很多时候,看一些数据领域的文章,说到为什么做数据仓库、数据仓库要分层,我们经常会看到一些结论:因为有ABCD…等等理由,比如降低开发成本、减少重复计算等等好处 然后,多数人就记住了ABCD。但是&#xff0…

VScode连接Xshell 并解决【过程试图写入的管道不存在】报错

一.下载vscode 国内镜像: https://vscode.cdn.azure.cn/stable/6c3e3dba23e8fadc360aed75ce363ba185c49794/VSCodeUserSetup-x64-1.81.1.exe二.打开vscode在扩展搜索SSH并安装 三.添加主机 按F1选择添加新的ssh主机 按格式输入后在左边会出现电视的图标 之后输入…

十一、K8S之持久化存储

持久化存储 一、概念 在K8S中,数据持久化可以让容器在重新调度、重启或者迁移时保留其数据,并且确保数据的可靠性和持久性。 持久化存储通常用于程序的状态数据、数据库文件、日志文件等需要在容器生命周期之外的数据,它可以通过各种存储解…

项目管理之如何监控项目健康状态

项目管理是一个复杂且关键的过程,涉及到多个关键因素,包括项目名称、项目管理委员会成员、项目经理、项目生命周期的各个阶段以及资源泳道等。如何有效地监控项目的健康状态是确保项目成功的重要环节。本文将详细介绍项目管理全景图及其在风险识别中的应…

【差旅游记】公乌素遇到的那些司机师傅

哈喽,大家好,我是雷工! 出差人出差在外,城际间靠各种公共交通工具,但到了目的地的城镇,最后一公里往往少不了打车,或出租车,或摩的三轮车。 不同于公共交通,像飞机火车高…

【C++类和对象中:解锁面向对象编程的奇妙世界】

【本节目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 赋值运算符重载 6. const成员函数 7. 取地址及const取地址操作符重载 1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗&#xf…

ConvNets 与 Vision Transformers:数学深入探讨

一、说明 我目睹了关于 Vision Transformer 的争论,讨论它们如何与 CNN 一样好或更好。我想知道我们是否也同样争论菠萝比西瓜好!或者马比海豚更好?其中许多讨论往往缺乏具体性,有时可能会歪曲上下文。 作为背景,在快速…

计算机基础知识44

overflow溢出属性 visible:默认值,内容不会被修剪,会呈现在元素框之外。hidden:内容会被修剪,并且其余内容是不可见的。scroll:内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。auto: …

GEE错误——XXX is not a function,如何解决这个问题?

错误: 这里的时错误原始的代码链接: https://code.earthengine.google.com/4bf0975a41e14d0c40e01925c6f3cf2a 这里主要的问题时这个单一影像不存在: ImageCollection (Error) ImageCollection.load: ImageCollection asset LANDSAT/LC08/C01/T1_SR/LC08_221077_201704…