408数据结构-树的基本概念与性质 自学知识点整理

树的定义

树是 n n n n ≥ 0 n≥0 n0)个结点的有限集。当 n = 0 n=0 n=0时,称为空树
任意一棵非空树应具有以下特性:

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

没有后继的结点称为“叶子结点”(或 叶结点/终端结点),有后继的结点称为“分支结点”(或 非终端结点)。

显然,树的定义是递归的,即树的定义中用到了其自身。树是一种递归的数据结构,其作为一种逻辑结构的同时也是一种分层结构,具有以下两个特点:

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

由此可推算出,结点数为 n n n的树中有 n − 1 n-1 n1条边。(边是连接起树中两个结点之间的“线”)

关于树的基本术语(图片来自王道书)

王道书第五章的图

  • 祖先结点:对某一个结点来说,从根结点到这个结点的唯一路径上的所有其它结点,都是这个结点的祖先。例如,对 K K K结点来说,从根结点 A A A K K K的唯一路径是 A → B → E → K A→B→E→K ABEK,则结点 A , B , E A, B, E A,B,E都是结点 K K K的祖先结点。(已经想起LCA了……
  • 子孙结点:对某一个结点来说,这个结点的所有后继结点,及其后继结点的后继,后继的后继的后继……直到叶结点,都是这个结点的子孙。例如,对 B B B结点来说,它的子孙包括 E , F , K , L E, F, K, L E,F,K,L结点。而对于根结点来说,整棵树除了它本身,所有结点都是其子孙。
  • 双亲结点(父结点)&孩子结点:对某一个结点来说,其直接前驱被称为它的双亲,其直接后继则被称为它的孩子。例如,结点 B B B是结点 E E E的双亲结点(父结点),而结点 E E E是结点 B B B的孩子结点。根结点是树中唯一没有双亲的结点。
  • 兄弟结点&堂兄弟结点:对两个结点,若其拥有同一个双亲结点,则这两个结点互称兄弟。双亲在同一层的结点则互为堂兄弟。例如,对结点 E E E,结点 F F F与其互为兄弟结点,而结点 G , H , I , J G, H, I, J G,H,I,J与其互为堂兄弟结点。
  • 结点的度和树的度:树中一个结点的孩子个数称为该结点的,树中结点的最大度数称为树的。例如结点 B B B的度为 2 2 2,结点 D D D的度为 3 3 3,这棵树的度为 3 3 3。(叶结点的度为 0 0 0
  • 结点的深度、高度和层次:结点的层次从树根开始定义,根结点为第 1 1 1层,它的孩子为第 2 2 2层,以此类推。结点的深度就是该结点所在的层次。树的高度(或深度)是树中结点的最大层数。结点的高度是以该结点为根的子树的高度。换而言之,对一个结点来说,其深度是从上往下数的第几层,而高度是从下往上数的第几层。例如,结点 B B B的层数与深度为 2 2 2,高度为 3 3 3。图中的这棵树高度为 4 4 4。深度一般默认从 1 1 1开始计算,但是某些题目中也可能从 0 0 0开始,需要特别注意一下。
  • 有序树与无序树:若树中结点的各子树从左到右都是有次序的,不能互换,则称该树为有序树,否则为无序树
  • 路径和路径长度:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,而路径长度是路径上所经过的边的个数。
    (注:因为树中的分支是有向的,即从双亲指向孩子,所以树中的路径是从上向下的,同一双亲的两个孩子之间不存在路径。也就是说,一个结点与其兄弟或堂兄弟结点及这些结点的子孙结点之间都不存在路径)
  • 森林:森林 m m m m ≥ 0 m≥0 m0)棵互不相交的树的集合,当 m = 0 m=0 m=0时称为空森林。森林的概念与树的概念十分相近,因为只要把树的根结点删去,其子树的集合就构成了一个森林。反之,只要给 m m m棵独立的树加上一个结点,并把这 m m m棵树作为该结点的子树,则森林就成了树。

树的性质相关

常见考点1:结点数=总度数+1

结点的度指的是该结点的孩子数量,而每个结点与其每个孩子都由唯一的边相连,因此树中所有结点的度数之和等于树中的边数之和。树中除了根结点以外的结点都有唯一的双亲结点,因此结点数 n n n等于边数之和再加 1 1 1,也就是树的总结点数等于总度数 + 1 +1 +1,加的这个“ 1 1 1”就是根结点。

常见考点2:度为 m m m的树和 m m m叉树的区别

度为 m m m的树:

  • 任意结点的度 ≤ m ≤m m(最多 m m m个孩子)
  • 至少有一个结点的度 = m =m =m(有 m m m个孩子)
  • 一定是非空树,至少有 m + 1 m+1 m+1个结点( 1 1 1个根结点 + m +m +m个叶结点)

m m m叉树:

  • 任意结点的度 ≤ m ≤m m(最多 m m m个孩子)
  • 允许所有结点的度都 < m <m m
  • 可以是空树

常见考点3:度为 m m m的树第 i i i层至多有 m i − 1 m^{i-1} mi1个结点( i ≥ 1 i≥1 i1

这句话等价于“ m m m叉树的第 i i i层至多有 m i − 1 m^{i-1} mi1个结点( i ≥ 1 i≥1 i1)”。
1 1 1层:有 m 0 = 1 m^0=1 m0=1个结点,根结点。
2 2 2层:有 m 1 = m m^1=m m1=m个结点,当根结点的度为 m m m时。
3 3 3层:有 m 2 m^2 m2个结点,当根结点的度为 m m m,并且根结点的每个孩子结点的度都为 m m m时。
……
以此类推,到第 i i i层时,这一层至多有 m i − 1 m^{i-1} mi1个结点。
(下图来自王道考研408数据结构课程视频 - 树的性质)
图片来自王道考研408数据结构课程视频

常见考点4:高度为 h h h m m m叉树至多有 m h − 1 m − 1 \frac{{{m}^{h}}-1}{m-1} m1mh1个结点

由“常见考点 3 3 3”可知,当各层结点数达到最大时,高度为 h h h m m m叉树第i层有 m i − 1 m^{i-1} mi1个结点,对其求和,有:

∑ i = 1 h m i − 1 = m 1 ( 1 − m h ) 1 − m = m h − 1 m − 1 , m 1 = 1 \sum\limits_{i=1}^{h}{{{m}^{i-1}}}=\frac{{{m}_{1}}\left( 1-{{m}^{h}} \right)}{1-m}=\frac{{{m}^{h}}-1}{m-1},{{m}_{1}}=1 i=1hmi1=1mm1(1mh)=m1mh1,m1=1

一个简单的等比数列求和问题。

常见考点5:高度为 h h h m m m叉树至少有 h h h个结点

高度为 h h h m m m叉树,至少有 h h h个结点,即每一层只有 1 1 1个结点。
而高度为 h h h的度为 m m m的树,至少有 h + m − 1 h+m-1 h+m1个结点,即除第一层的某一层有 m m m个结点,其余层均只有 1 1 1个结点。

常见考点6:具有 n n n个结点的 m m m叉树的最小高度为 ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ \left\lceil {{\log }_{m}}\left( n\left( m-1 \right)+1 \right) \right\rceil logm(n(m1)+1)

要使 m m m叉树的高度最小,则每个结点要有尽可能多的孩子。
因此,设除叶结点的每个结点均有 m m m个孩子。由“常见考点 4 , 4, 4,”可知,高度为 h h h m m m叉树至多有 m h − 1 m − 1 \frac{{{m}^{h}}-1}{m-1} m1mh1个结点。假设这 n n n个结点有 h h h层,则有:

m h − 1 − 1 m − 1 < n ≤ m h − 1 m − 1 \frac{{{m}^{h-1}}-1}{m-1}<n\le \frac{{{m}^{h}}-1}{m-1} m1mh11<nm1mh1

因为 n n n一定要大于 h − 1 h-1 h1层的最大结点数,同时小于等于 h h h层的最大结点数,这样才能让这 n n n个结点满足有 h h h的条件。
对这个不等式同时乘以 m − 1 m-1 m1再加 1 1 1,得:

m h − 1 < n ( m − 1 ) + 1 ≤ m h {{m}^{h-1}}<n\left( m-1 \right)+1\le {{m}^{h}} mh1<n(m1)+1mh

再同时对 m m m取对数,有:

h − 1 < log ⁡ m [ n ( m − 1 ) + 1 ] ≤ h h-1<{{\log }_{m}}\left[ n\left( m-1 \right)+1 \right]\le h h1<logm[n(m1)+1]h

所以解得 h h h的取值范围为:

log ⁡ m [ n ( m − 1 ) + 1 ] ≤ h < log ⁡ m [ n ( m − 1 ) + 1 ] + 1 {{\log }_{m}}\left[ n\left( m-1 \right)+1 \right]\le h<{{\log }_{m}}\left[ n\left( m-1 \right)+1 \right]+1 logm[n(m1)+1]h<logm[n(m1)+1]+1

h h h的值满足: h min ⁡ = ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ {{h}_{\min}}=\left\lceil {{\log }_{m}}\left( n\left( m-1 \right)+1 \right) \right\rceil hmin=logm(n(m1)+1)(向上取整)时上式成立。


总结一下,考点 2 2 2和考点 4 , 5 4, 5 4,5需要重点掌握。其余知识点也应反复学习,结合课后习题强化记忆加深理解,不熟悉的概念多加练习后自然就能记住。
从这一章开始将会步入408数据结构中最难的部分,树和图我以前在打OI的时候就学的不太好,得打起精神来了。
关于二叉树的内容将放在下一篇博客里。
以上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】/*数据类型和变量*/

目录 前言 一、数据类型的介绍 二、内置数据类型的介绍 2.1 字符型 2.2 整型 2.3 浮点型 2.4 布尔类型 三、数据类型长度的计算 3.1 sizeof 操作符 3.2 数据类型的长度(VS2022) 3.3 sizeof中表达式不计算 四、signed 和 unsigned 五、数据类型的取值范围 六、变…

.360勒索病毒的威胁:如何恢复您的数据?

引言&#xff1a; 近年来&#xff0c;网络安全威胁层出不穷&#xff0c;其中.360勒索病毒以其独特的攻击方式和广泛的传播能力&#xff0c;成为了众多企业和个人面临的重大挑战。本文将对.360勒索病毒进行深入剖析&#xff0c;并探讨应对此类病毒的有效策略&#xff0c;以帮助…

UE5入门学习笔记(六)——编译低版本插件

对于有些低版本的插件&#xff0c;可以通过此方法自己编译到高版本而无需等待插件作者更新 使用工具&#xff1a;如图所示 步骤1&#xff1a;打开cmd&#xff0c;并使用cd命令切换到此目录 步骤2&#xff1a;输入如下指令 RunUAT.bat BuildPlugin -Plugin“路径1” -Package“…

Java中的进程和线程

进程定义 进程是正在运行的程序&#xff0c;是系统进行资源分配和调用的独立单位&#xff0c;每一个进程都有它自己的内存空间和系统资源 线程的定义 线程是进程中单个顺序控制流&#xff0c;是一种执行路径 单线程&#xff1a; 一个进程如果只有一条路径则被称为单线程 多…

python学习笔记----面向对象(十)

一、什么是类 类是一个抽象的模板&#xff0c;用于创建具体的实例。可以将类理解为一个蓝图&#xff0c;它定义了一系列对象共有的属性&#xff08;数据&#xff09;和方法&#xff08;函数&#xff09;。类是对一组具有相同属性和功能的对象的抽象。例如&#xff0c;你可以定…

数据结构——循环结构:for循环

今天是星期五&#xff0c;明天休息&#xff0c;后天补课&#xff0c;然后就是运动会&#xff0c;接着是放假。&#xff08;但这些都和我没关系啊&#xff0c;哭死&#xff01;&#xff09;今天脑袋难得清醒一会儿&#xff0c;主要是醒的比较早吧&#xff0c;早起学了一会&#…

【VueUse】超越基本功能的高级 Vue 元素操作

在vue开发中我们经常需要操作DOM元素&#xff0c;从简单的添加类到动态创建元素&#xff0c;这些操作都是不可避免的。而在VueUse库中&#xff0c;Elements相关API函数为我们提供了一系列强大而灵活的工具&#xff0c;帮助我们更轻松地处理DOM元素。无论是优雅地处理元素、动态…

[XYCTF新生赛]-PWN:fmt解析(scanf格式化字符串漏洞,任意地址写)

查看保护 查看ida 这里没什么好说的 完整exp&#xff1a; from pwn import* context(log_leveldebug) #pprocess(./fmt) premote(gz.imxbt.cn,20975) backdoor0x4012BEp.recvuntil(bgift: ) printf_addrint(p.recv(14),16) print(hex(printf_addr)) libcELF(./libc-2.31.so) …

HTML5实用大全(Part.2)

引言&#xff1a; 哈喽&#xff0c;各位小伙伴们大家好呀&#xff0c;学习了上一篇关于HTML5的文章后&#xff0c;你是否对于入门HTML5有了一定的基础了呢&#xff0c;本篇博客我们将继续学习HTML5的不同标签&#xff0c;跟上队伍&#xff0c;准备出发咯&#xff01; 1.标签之…

js APIS part2

什么是事件&#xff1f; 事件是在编程时系统内发生的 动作 或者发生的事情。比如用户在网页上 单击 一个按钮 什么是事件监听&#xff1f; 就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响应&#xff0c;也称为 绑定事件或者注册…

2024年钉钉群直播回放如何永久保存

工具我已经打包好了&#xff0c;有需要的自己取一下 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.再把逍遥一仙下载器压缩包也解压一下 3.打开逍遥一仙下载器文件夹里面的M3U8…

python实验一 简单的递归应用

实验一 实验题目 1、兔子繁殖问题(Fibonacci’s Rabbits)。一对兔子从出生后第三个月开始&#xff0c;每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死&#xff0c;一月份抱来一对刚出生的小兔子&#xff0c;问一年中每个月各有多少只兔子。 &…

软件工程全过程性文档(软件全套文档整理)

软件项目相关全套精华资料包获取方式①&#xff1a;进主页。 获取方式②&#xff1a;本文末个人名片直接获取。 在软件开发的全过程中&#xff0c;文档是记录项目进展、决策、设计和测试结果的重要工具。以下是一个简要的软件全过程性文档梳理清单&#xff1a; 需求分析阶段…

基于 AI 的数据库助手-Chat2DB

序言 现在已经开始步入 AI 时代&#xff0c;AI 产品也已经络绎不绝。今天&#xff0c;给大家介绍一款数据库的 AI 产品 —— Chat2DB。 一、什么是 Chat2DB Chat2DB 由阿里提供的一个数据库管理、数据开发、数据分析的工具&#xff0c;它是一个 AI 原生的数据库管理工具&…

Spring 当中的Bean 作用域

Spring 当中的Bean 作用域 文章目录 Spring 当中的Bean 作用域每博一文案1. Spring6 当中的 Bean的作用域1.2 singleton 默认1.3 prototype1.4 Spring 中的 bean 标签当中scope 属性其他的值说明1.5 自定义作用域&#xff0c;一个线程一个 Bean 2. 总结:3. 最后&#xff1a; 每…

JavaScript基础(三)

JS的数据类型 数据类型&#xff0b;解释 undefined 如var num;变量num没有初始值将被赋予undefined[基本数据类型]。 null 表示一个空值&#xff0c;与undefined值相等[对象]。 number 例:var num10; //整数&#xff0c;var num10.5; //浮点型。 boolean 布尔型&…

【linuxC语言】fcntl和ioctl函数

文章目录 前言一、功能介绍二、具体使用2.1 fcntl函数2.2 ioctl函数 三、拓展&#xff1a;填写arg总结 前言 在Linux系统编程中&#xff0c;经常会涉及到对文件描述符、套接字以及设备的控制操作。fcntl和ioctl函数就是用来进行这些控制操作的两个重要的系统调用。它们提供了对…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(一)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; Phpsploit-Framework&#xff08;简称 PSF&#xff09;框架软件&#xff0c;是一款什么样的软件呢&#xff1f; Phpspl…

[数据结构]———归并排序

具体代码&#xff1a;在gitee仓库&#xff1a;登录 - Gitee.com 目录 ​编辑 1.基本思想&#xff1a; 2. 代码解析 1.分析 2.逻辑图 3.运行结果 1.基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分…