26考研——树与二叉树_树、森林(5)

408答疑


文章目录

  • 二、树、森林
    • 树的基本概念
      • 树的定义和特性
        • 树的定义
        • 树的特性
      • 基本术语
        • 树的基本术语和概念
          • 祖先、子孙、双亲、孩子、兄弟和堂兄弟
          • 结点的层次、度、深度和高度
          • 树的度和高度
          • 分支结点和叶结点
          • 有序树和无序树
          • 路径和路径长度
        • 森林的基本术语和概念
          • 森林的定义
          • 森林与树的关系
      • 树的性质
        • 总结
    • 树的存储结构
      • 概述
      • 双亲表示法
        • 注意事项
      • 孩子表示法和孩子兄弟表示法
        • 孩子表示法
        • 孩子兄弟表示法
        • 存储结构选择
    • 树、森林与二叉树的转换
      • 树转为二叉树
        • 转换规则
        • 转换方法
        • 转换性质
        • 转换示例
      • 森林转为二叉树
        • 转换方法
        • 二叉树转换为森林
    • 树和森林的遍历
      • 树的遍历
        • 遍历定义
          • 先根遍历
          • 后根遍历
        • 遍历序列
      • 森林的遍历
        • 先序遍历森林
        • 中序遍历森林
      • 森林与二叉树遍历方法的对应关系
        • 下表树和森林的遍历与二叉树遍历的对应关系
        • 注意事项
  • 四、参考资料
    • 鲍鱼科技课件
    • 26王道考研书


二、树、森林

树的基本概念

树的定义和特性

树的定义

树是一个递归的概念,由 n ( n ≥ 0 ) n (n \geq 0) n(n0) 个结点的有限集组成。当 n = 0 n=0 n=0 时,称为空树。在任意一棵非空树中应满足:

  1. 有且仅有一个特定的称为根的结点。
  2. n > 1 n > 1 n>1 时,其余结点可分为 m ( m > 0 ) m (m > 0) m(m>0) 个互不相交的有限集 T 1 , T 2 , ⋯ , T m T_1, T_2, \cdots, T_m T1,T2,,Tm,其中每个集合本身又是一棵树,并且称为根的子树。
树的特性

树作为逻辑结构,同时也是一种分层结构,具有以下两个特点:

  1. 树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。
  2. 树中所有结点都可以有零个或多个后继。

树适用于表示具有层次结构的数据。树中的某个结点(除根结点外)最多只和上一层的一个结点(其父结点)有直接关系,根结点没有直接上层结点,因此在 n n n 个结点的树中有 n − 1 n-1 n1 条边。而树中每个结点与其下一层的零个或多个结点(其孩子结点)都有直接关系。

基本术语

树的基本术语和概念

在这里插入图片描述

祖先、子孙、双亲、孩子、兄弟和堂兄弟
  • 祖先:从根结点到某一结点的唯一路径上的所有其他结点。
    • 结点 K K K的祖先是从根 A A A K K K的唯一路径上的所有其他结点。
  • 子孙:某一结点的子树中所有结点。
    • 如结点 B B B K K K的祖先,而 K K K B B B的子孙,结点 B B B的子孙包括 E , F , K , L E, F, K, L E,F,K,L
  • 双亲:某一结点的直接前驱,即指向该结点的结点。
  • 孩子:某一结点的直接后继,即该结点指向的结点。
    • 路径上最接近 K K K的结点 E E E称为 K K K的双亲, K K K E E E的孩子。
  • 兄弟:有相同双亲的结点。
  • 堂兄弟:在同一层的结点互为堂兄弟。
    • 有相同双亲的结点称为兄弟(如 K K K L L L)。
    • 双亲在同一层的结点互为堂兄弟(如 G G G E E E F F F H H H I I I J J J)。
  • A A A是树中唯一没有双亲的结点。
结点的层次、度、深度和高度
  • 层次:从树根开始定义,根结点为第1层,它的孩子为第2层,以此类推。
  • 结点的度:一个结点的孩子个数称为该结点的度。
    • 如结点 B B B的度为2,结点 D D D的度为3。
  • 深度:结点所在的层次。
  • 高度:以该结点为根的子树的高度。
树的度和高度
  • 树的度:树中结点的最大度数称为树的度。
    • 上图中树的度为3。
  • 树的高度:树的高度(或深度)是树中结点的最大层数。
    • 上图中树的高度为4。
分支结点和叶结点
  • 分支结点:度大于0的结点称为分支结点(也称非终端结点)。
  • 叶结点:度为0(没有孩子结点)的结点称为叶结点(也称终端结点)。
有序树和无序树
  • 有序树:树中结点的各子树从左到右是有次序的,不能互换。
  • 无序树:树中结点的各子树从左到右没有次序,可以互换。
    • 假设上图为有序树,若将子结点位置互换,则变成一棵不同的树。
路径和路径长度
  • 路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。
    • 因为树中的分支是有向的,即从双亲指向孩子,所以树中的路径是从上向下的,同一双亲的两个孩子之间不存在路径。
  • 路径长度:路径上所经过的边的个数。
森林的基本术语和概念
森林的定义
  • 森林:是 m ( m ≥ 0 ) m (m \geq 0) m(m0) 棵互不相交的树的集合。
森林与树的关系
  • 森林的概念与树的概念十分相近,因为只要把树的根结点删去就成了森林。反之,只要给 m m m 棵独立的树加上一个结点,并把这 m m m 棵树作为该结点的子树,则森林就变成了树。

树的性质

  1. 树的结点数 n n n 等于所有结点的度数之和加1。

    • 结点的度数是指该结点的孩子数量,每个结点与其每个孩子都由唯一的边相连,因此树中所有结点的度数之和等于树中的边数之和。
    • 树中的结点(除根外)都有唯一的双亲,因此结点数 n n n 等于边数之和加1,即所有结点的度数之和加1。
  2. 度为 m m m 的树中第 i i i 层上至多有 m i − 1 m^{i-1} mi1 个结点 ( i ≥ 1 i \geq 1 i1)。

    • 第1层至多有1个结点(根结点),第2层至多有 m m m 个结点,第3层至多有 m 2 m^2 m2 个结点,以此类推。
    • 使用数学归纳法可推出第 i i i 层至多有 m i − 1 m^{i-1} mi1 个结点。
  3. 高度为 h h h m m m 叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1 个结点。

    • 当各层结点数达到最大时,树中至多有 1 + m + m 2 + ⋯ + m h − 1 = m h − 1 m − 1 1 + m + m^2 + \cdots + m^{h-1} = \frac{m^h - 1}{m - 1} 1+m+m2++mh1=m1mh1 个结点。
  4. 度为 m m m、具有 n n n 个结点的树的最小高度 h h h ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1)+1) \rceil logm(n(m1)+1)⌉

    • 为使树的高度最小,在前 h − 1 h-1 h1 层中,每层的结点数都要达到最大,前 h − 1 h-1 h1 层最多有 ( m h − 1 − 1 ) ( m − 1 ) \frac{(m^{h-1} - 1)}{(m-1)} (m1)(mh11) 个结点,前 h h h 层最多有 ( m h − 1 ) ( m − 1 ) \frac{(m^h - 1)}{(m-1)} (m1)(mh1) 个结点。
    • 因此 ( m h − 1 − 1 ) ( m − 1 ) < n ≤ ( m h − 1 ) ( m − 1 ) \frac{(m^{h-1} - 1)}{(m-1)} < n \leq \frac{(m^h - 1)}{(m-1)} (m1)(mh11)<n(m1)(mh1),即 h − 1 < log ⁡ m ( n ( m − 1 ) + 1 ) ≤ h h-1 < \log_m(n(m-1)+1) \leq h h1<logm(n(m1)+1)h,解得 h min = ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ h_{\text{min}} = \lceil \log_m(n(m-1)+1) \rceil hmin=logm(n(m1)+1)⌉
  5. 度为 m m m、具有 n n n 个结点的树的最大高度 h h h n − m + 1 n-m+1 nm+1

    • 树的度为 m m m,因此至少有一个结点有 m m m 个孩子,它们处于同一层。
    • 为使树的高度最大,其他层可仅有一个结点,因此最大高度(层数)为 n − m + 1 n-m+1 nm+1
    • 由此,也可逆推出高度为 h h h、度为 m m m 的树至少有 h + m − 1 h+m-1 h+m1 个结点。
总结
  • 树中的结点数等于所有结点的度数之和加1。
  • 度为 m m m 的树中第 i i i 层上至多有 m i − 1 m^{i-1} mi1 个结点。
  • 高度为 h h h m m m 叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1 个结点。
  • 具有 n n n 个结点的 m m m 叉树的最小高度为 ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1)+1) \rceil logm(n(m1)+1)⌉

树的存储结构

概述

树的存储方式有多种,既可采用顺序存储结构,又可采用链式存储结构,但无论采用何种存储方式,都要求能唯一地反映树中各结点之间的逻辑关系。这里介绍3种常用的存储结构。

双亲表示法

  • 定义:这种存储结构采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲结点在数组中的位置。
  • 特点:根结点下标为0,其伪指针域为-1。双亲表示法利用了每个结点(根结点除外)只有唯一双亲的性质,可以很快得到每个结点的双亲结点,但求结点的孩子时则需要遍历整个结构。
  • 图示:如下图所示,展示了树的双亲表示法及其指针图示。
    在这里插入图片描述
注意事项
  • 顺序存储结构与链式存储结构:树的顺序存储结构中,数组下标代表结点的编号,下标中所存的内容指示了结点之间的关系。而在二叉树的顺序存储结构中,数组下标既代表了结点的编号,又指示了二叉树中各结点之间的关系。
  • 存储结构选择:二叉树属于树,因此二叉树也可用树的存储结构来存储,但树却不都能用二叉树的存储结构来存储。

孩子表示法和孩子兄弟表示法

孩子表示法
  • 定义:孩子表示法是将每个结点的孩子结点视为一个线性表,且以单链表作为存储结构,则 n n n 个结点就有 n n n 个孩子链表(叶结点的孩子链表为空表)。
  • 特点 n n n 个头指针又组成一个线性表,为便于查找,可采用顺序存储结构。
  • 图示:下图的是树的孩子表示法。
    在这里插入图片描述
孩子兄弟表示法
  • 定义:孩子兄弟表示法也称二叉树表示法,即以二叉链表作为树的存储结构。每个结点包括三部分内容:结点值、指向结点第一个孩子结点的指针,以及指向结点下一个兄弟结点的指针(沿此域可以找到结点的所有兄弟结点)。
  • 图示:下图的是树的孩子兄弟表示法。
  • 优点:孩子兄弟表示法比较灵活,其最大的优点是可以方便地实现树转换为二叉树的操作,易于查找结点的孩子等,但缺点是从当前结点查找其双亲结点比较麻烦。
    在这里插入图片描述
存储结构选择
  • 孩子表示法:寻找孩子的操作非常方便,而寻找双亲的操作则需要遍历 n n n 个结点中孩子链表指针域所指向的 n n n 个孩子链表。
  • 孩子兄弟表示法:若为每个结点增设一个 parent 域指向其父结点,则查找结点的父结点也很方便。

树、森林与二叉树的转换

树转为二叉树

转换规则

树转换为二叉树的规则是:每个结点的左指针指向它的第一个孩子,右指针指向它在树中的相邻右兄弟,这个规则又称为“左孩子右兄弟”。由于根结点没有兄弟,因此转换得到的二叉树没有右子树。

转换方法
  1. 在兄弟结点之间加一连线:将树中每个结点的兄弟结点通过连线连接起来。
  2. 保留第一个孩子的连线:对每个结点,只保留它与第一个孩子的连线,而与其他孩子的连线全部抹掉。
  3. 旋转树结构:以树根为轴心,顺时针旋转45°。
转换性质
  • 二叉树和树都可以用二叉链表作为存储结构。
  • 从物理结构上看,树的孩子兄弟表示法与二叉树的二叉链表表示法是相同的,因此可以用同一存储结构的不同解释将一棵树转换为二叉树。
转换示例

下图展示了树与二叉树的对应关系,通过上述转换规则和方法,可以将树转换为二叉树。
在这里插入图片描述

森林转为二叉树

将森林转换为二叉树的规则与树类似。先将森林中的每棵树转换为二叉树,由于任意一棵树对应的二叉树的右子树必空,森林中各棵树的根也可视为兄弟关系,将第二棵树对应的二叉树当作第一棵二叉树根的右子树……以此类推,就可以将森林转换为二叉树。

转换方法
  1. 将森林中的每棵树转换成相应的二叉树。
  2. 每棵树的根也可视为兄弟关系,在每棵树的根之间加一根连线。
  3. 以第一棵树的根为轴心顺时针旋转45°。
二叉树转换为森林

二叉树转换为森林的规则:若二叉树非空,则二叉树的根及其左子树为第一棵树的二叉树形式,所以将根的右链断开。二叉树根的右子树又可视为一个由除第一棵树外的森林转换后的二叉树,应用同样的方法,直到最后只剩一棵没有右子树的二叉树为止,最后将每棵二叉树依次转换成树,就得到了原森林。

二叉树转换为树或森林是唯一的。
在这里插入图片描述

树和森林的遍历

树的遍历

遍历定义

树的遍历是指用某种方式访问树中的每个结点,且仅访问一次。主要有两种方式:

先根遍历
  • 若树非空,先访问根结点。
  • 再依次遍历根结点的每棵子树,遍历子树时仍遵循先根后子树的规则。
  • 其遍历序列与这棵树相应二叉树的先序序列相同。
后根遍历
  • 若树非空,先依次遍历根结点的每棵子树,遍历子树时仍遵循先子树后根的规则。
  • 再访问根结点。
  • 其遍历序列与这棵树相应二叉树的中序序列相同。
遍历序列
  • 下图的树的先根遍历序列为 A B E F C D G ABEFCDG ABEFCDG,后根遍历序列为 E F B C G D A EFBCGDA EFBCGDA
  • 另外,树也有层次遍历,与二叉树的层次遍历思想基本相同,即按层序依次访问各结点。
    在这里插入图片描述

森林的遍历

先序遍历森林

按照森林和树相互递归的定义,可得到森林的两种遍历方法。先序遍历森林的规则如下:

  1. 访问森林中第一棵树的根结点。
  2. 先序遍历第一棵树中根结点的子树森林。
  3. 先序遍历除去第一棵树之后剩余的树构成的森林。
中序遍历森林

中序遍历森林的规则如下:

  1. 中序遍历森林中第一棵树的根结点的子树森林。
  2. 访问第一棵树的根结点。
  3. 中序遍历除去第一棵树之后剩余的树构成的森林。
    下图的森林的先序遍历序列为 A B C D E F G H I J ABCDEFGHIJ ABCDEFGHIJ,中序遍历序列为 B C D A F E H I G BCDAFEHIG BCDAFEHIG
    在这里插入图片描述

森林与二叉树遍历方法的对应关系

当森林转换成二叉树时,其第一棵树的子树森林转换成左子树,剩余树的森林转换成右子树,可知森林的先序和中序遍历即为其对应二叉树的先序和中序遍历。

下表树和森林的遍历与二叉树遍历的对应关系
森林二叉树
先根遍历先序遍历先序遍历
后根遍历中序遍历中序遍历
注意事项

部分教材也将森林的中序遍历称为后序遍历,称中序遍历是相对其二叉树而言的,称后序遍历是因为根确实是最后才访问的,若遇到这两种称谓,则可理解为同一种遍历方法。

四、参考资料

鲍鱼科技课件

b站免费王道课后题讲解: link
在这里插入图片描述

网课全程班: link
在这里插入图片描述

26王道考研书

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

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

相关文章

为何服务器监听异常?

报错&#xff1a; 执行./RCF后出现监听异常--在切换网络后&#xff0c;由于前面没有退出./RCF执行状态&#xff1b;重新连接后&#xff0c;会出现服务器监听异常 原因如下&#xff1a; 由于刚开始登录内网&#xff0c;切换之后再重新登录内网&#xff0c;并且切换网络的过程中…

ROS2 架构梳理汇总整理

文章目录 前言正文机器人平台整体架构&#xff08;ROS2&#xff09;图一、个人理解整体架构 ROS2架构图一、个人理解ROS2整体架构图二、开发者整理ROS2整体架构图三、Intel整理ROS2整体架构图四、DDS具体架构说明 ROS2 Control架构图一、官方整整理ROS2 Control整体架构 总结 前…

定长内存池原理及实现

目录 一、池化技术 二、内存池 三、内存池主要解决的问题 四、定长内存池的实现 1.定长内存池的原理 2.框架 3.Delete实现 4.New实现 5.性能测试 五、源码 FixedMemoryPool.h test.cc 一、池化技术 所谓“池化技术”&#xff0c;就是程序先向系统申请过量的资源&…

广告推荐算法 - 学习笔记

文章目录 1、前言2、学习笔记2.1、什么是计算广告系统&#xff1f; 1、前言 本篇博客&#xff0c;是我用来记录学习广告推荐算法的一些笔记和总结。 参考内容&#xff1a; 1、王喆&#xff1a;"深度"学习计算广告 2、deepseek 2、学习笔记 2.1、什么是计算广告系统…

卷积神经网络的原理、实现及变体

卷积神经网络convolutional neural network&#xff0c;CNN 是为处理图像数据而生的网络&#xff0c;主要由卷积层&#xff08;填充和步幅&#xff09;、池化层&#xff08;汇聚层&#xff09;、全连接层组成。 卷积 虽然卷积层得名于卷积&#xff08;convolution&#xff09…

Excel第41套全国人口普查

2. 导入网页中的表格&#xff1a;数据-现有链接-考生文件夹&#xff1a;网页-找到表格-点击→变为√-导入删除外部链接关系&#xff1a;数据-点击链接-选中连接-删除-确定&#xff08;套用表格格式-也会是删除外部链接&#xff09;数值缩小10000倍&#xff08;除以10000即可&am…

深度学习篇---回归分类任务的损失函数

文章目录 前言一、分类任务常用损失函数1. 交叉熵损失&#xff08;Cross-Entropy Loss&#xff09;数学形式使用场景特点训练状态分析损失下降损失震荡训练损失低但是验证损失高 2. Hinge Loss&#xff08;合页损失&#xff09;数学形式适用场景特点训练状态分析损失趋近于0损失…

OpenCV三维解算常用方法C++

如果标定过程是通过OpenCV张正友标定法实现的&#xff0c;得到的内参外参保存在.txt文件中是这样的形式&#xff1a; ① 内参intrinsics.txt&#xff1a; ② 外参extrinsics.txt&#xff1a; 那么可以通过如下方法读取.txt文件获取左右相机内外参&#xff0c;主要包括三维解算…

光电效应及普朗克常数的测定数据处理 Python实现

内容仅供参考&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;如有疑问&#xff0c;欢迎交流。 因为我不会Excel所以只能用Python来处理 祝大家早日摆脱物理实验的苦海 用到的一些方法 PCHIP &#xff08;分段三次埃尔米特插值多项式&#xff09; 因为实验时记录的数…

【日常笔记 1】 有关异常学习笔记

今天笔记内容详见 ----- C11_5 异常部分 笔记较乱 , 笔者只是为了记录重要知识点 , 想重点了解相关知识点的可关注笔者正文栏目 ~ 笔者代码仓 : C11_5 代码 异常部分学习笔记 异常基本关键字信息   throw    ----    抛出异常   try - catch ----    捕获异常 , 必须…

Linux UDP网络编程套接字sockets

目录 一、预备知识 1、IP地址 2、端口号 3、Socket网络通信 4、认识TCP/UDP协议 &#xff08;1&#xff09;TCP协议 &#xff08;2&#xff09;UDP协议 &#xff08;3&#xff09;网络字节序 二、socket网络套接字 1、概念 2、Socket 的地址结构和一系列转换函数 &a…

VUE3项目VITE打包优化

VUE3项目VITE打包优化 代码加密依赖配置效果对比图 自动导入依赖配置 代码压缩依赖配置效果对比图 图片压缩依赖配置效果对比图 字体压缩总结与实践运用效果 代码加密 依赖 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

NO.57十六届蓝桥杯备战|基础算法-高精度|加减乘除|模拟竖式计算(C++)

当数据的值特别⼤&#xff0c;各种类型都存不下的时候&#xff0c;此时就要⽤⾼精度算法来计算加减乘除&#xff1a; 先⽤字符串读⼊这个数&#xff0c;然后⽤数组逆序存储该数的每⼀位&#xff1b;利⽤数组&#xff0c;模拟加减乘除运算的过程。 ⾼精度算法本质上还是模拟算法…

最新DeepSeek-V3-0324:AI模型性能提升与新特性解析

文章目录 性能提升概览新特性解析1. 推理任务表现提高2. 前端开发能力增强3. 中文写作与搜索能力优化4. 模型开源 总结与展望 随着人工智能技术的快速发展&#xff0c;模型的迭代更新成为推动技术进步的重要力量。最近&#xff0c;DeepSeek团队发布了其V3模型的最新小版本更新—…

linux常用指令(7)

今天还是继续学习linux相关的指令,基础越牢固,就越有利于我们后面的学习,那么话不多说,来看. 1.head指令 功能描述&#xff1a;用于显示文件的开头部分内容,默认情况下head显示文件的前10行内容. 基本语法&#xff1a;head 文件 选项&#xff1a;-n nums 显示前nums行内容 …

数仓架构告别「补丁」时代!全新批流一体 Domino 架构终结“批流缝合”

在数字化转型的浪潮中&#xff0c;企业对数据处理的需求日益复杂多变&#xff0c;传统的批处理和流处理架构已难以满足日益增长的性能和时效性要求。在此背景下&#xff0c;YMatrix CEO 姚延栋发布了深度文章《数仓架构告别「补丁」时代&#xff01;全新批流一体 Domino 架构终…

HTB 笔记 | SQL 注入基础 + 实操小练习 P2

1. 数据库类型 数据库分为两类&#xff1a; 关系型数据库&#xff08;Relational Databases&#xff09; 使用表格存储数据&#xff08;行和列&#xff09;。数据通过“键”连接&#xff0c;形成逻辑关系。示例&#xff1a;MySQL、PostgreSQL、SQL Server。特点&#xff1a;结…

MySQL 入门大全:数据类型

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

解决 Not allowed to load local resource 问题

记录一下遇到的问题&#xff1a;html跳转本地资源&#xff0c;用相对路径 这样是不对的&#xff0c;要用 <script src"/jquery.min.js"></script> 网络路径也行&#xff0c;慢了一点 记得一定要关闭浏览器的广告屏蔽器 绝对路径也行&#xff0c;不过要…

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…