数据结构-树

本章内容为数据结构学习,参照B站up"蓝不过海呀"


目录

树的基本概念

节点

根节点

[父节点 子结点](#父节点 子结点)

边

[兄弟结点 堂兄弟](#兄弟结点 堂兄弟)

[祖先节点 子孙节点](#祖先节点 子孙节点)

叶节点

树的两个定义

[定义一 原始定义](#定义一 原始定义)

[定义二 递归定义](#定义二 递归定义)

术语

层数

[深度 高度](#深度 高度)

结点的度

叶结点

分支节点

树的度

[度为m的树 m叉树](#度为m的树 m叉树)

[有序树 无序树](#有序树 无序树)

[路径 路径长度](#路径 路径长度)

森林

树的性质

[节点数 边数 度数](#节点数 边数 度数)

m叉树每层最多节点数

高h的m叉树最多结点数

高h的m叉树最少结点数

高h度m的树最少结点

n结点m叉树最小高度

n结点m叉树最大高度

n结点度m数=树最大高度

树的性质总结

[二叉树 Binary Tree](#二叉树 Binary Tree)

二叉树的定义

二叉树和度为二的树

二叉树的基本形态

特殊的二叉树

满二叉树

完全二叉树

二叉树的性质

结点数之间的关系

二叉树每层最多结点数

完全二叉树的性质

编号性质

度为1的性质

叶节点只可能出现在最后两层

具有n个结点的完全二叉树的高度


树结构的引入

前面学习的线性表、栈、队列都属于线性结构 :数据元素之间是"一个接一个"的关系,除首尾外,每个元素只有一个前驱和一个后继。但现实中有很多关系并不是线性的,而是层次关系。

计算机里的树结构就像一株倒过来的树

树的基本概念

节点

结点:树中的一个独立单元。包含一个数据元素及若干指向其子树的分支,如图中的A、B、C、D等

根节点

根节点:树中最上层的唯一结点。如A

父节点 子结点

父节点:又称双亲结点

子结点:又称孩子节点

结点的子树的根称为该结点的孩子,相应地,该结点称为孩子的双亲

如:B、C、D是A的子节点 ;A是B、C、D的父节点

同理:对于B而言,其子节点为:E、F;对I结点而言,其子结点为J、K

根节点无父结点,叶节点无子节点

边

边:节点与节点相连的线段。

上边说根节点无父结点,两个结点对一个边。

那么一个树有N个结点,则存在N-1个边

兄弟结点 堂兄弟

兄弟节点:同一个双亲的结点称作:兄弟节点

如结点B、C、D之父节点皆为A,那么B、C、D之间互为兄弟节点

再者E同F、J同K之间也互为兄弟节点

祖先节点 子孙节点

祖先节点:从根到该结点所经分支上的所有结点

如:A→C→G→H

A为C、G、H的祖先节点;反之,C、G、H均为A的子孙节点

再者:A→B→F,A→D→I→J等,皆如此

对于A结点而言,树上除它本身外的所有结点都是它的子孙节点

叶节点

叶节点:又称叶子、叶子节点

没有子节点的结点叫做叶节点

树的两个定义

定义一 原始定义

树是由n个结点构成的有限集合

n=0:空树

n>=0:有且仅有一个根节点

其余可以不断细分为m个互不相交的子集 ,每个子集也是树,这些子集称为根节点A的子树

一棵树,有且仅有一个根节点

定义二 递归定义

一棵树可以不断细分为m个互不相交的子集 ,每个子集也是树,这些子集称为根节点A的子树

我们可以把子树从根节点A中分离出来。比如把左红色部分抽出来

则B为E、F的根节点,节点数n=3。其中E、F亦可分为两个不相交的子树

所以从树中分离出来的子树本身也是一种树,树是可以递归下去的

术语

层数

我们根据根节点(祖先节点)-子节点-子孙节点可以对树进行分层

深度 高度

深度:一个结点的深度表示从上往下,它所在的层次。

高度:一个结点的高度表示以它为根的子树的层数

对于树(包含子树)而言,层数=深度=高度

结点的度

节点的度:该节点的子节点的个数

如:A的度为3;B的度为2;D的度为1;E、F、H、J、K的度为0

叶结点

叶节点的第二个定义:度为0的结点叫叶节点

分支节点

度>0的结点叫分支节点

如:A、B、C、D、G、I

树的度

树中结点最大的度数

如下图的树的度为3,我们也成这棵树叫度为3的树

度为m的树 m叉树

度为m的树:这棵树的度为几,那这棵树就叫做度为几的树,其名字随着度的改变而改变

m叉树:树里面最多有m个分支。即树的度不得超过m

  • 共同点:树的结点最多为m
  • 不同点:度为m的树至少有一个结点的度等于m;m叉树的所有结点都可以小于m,甚至为0(空树)
有序树 无序树

有序树:各结点的子树从左到右有次序、不能互换,叫做有序树

无序树:不满足上式的叫做无序树

路径 路径长度

两个节点的路径就是从上到下经过的节点序列

路径长度:经过的边数是路径的长度

森林

由m(m>=0)棵互补相交的树所构成的集合

森林也可以变为树

树的性质

节点数 边数 度数

节点数n=边数+1=所有结点的度数+1

一条边就是一个度

节点数可表示:或

边数可表示:或

节点i的度可表示:或或

树T的度可表示:

那么对于度为m的树T而言,即对于

节点数:

所有结点度数:

我们可以这样理解:n个节点假设都有父节点,那么必然与其父节点存在n条边。但根节点不存在父节点,自然不存在其边,故整个树仅有条边。根据前面的,对于一个结点而言,它有几个子结点,就有几条边,就有几个度。那么除开根结点外存在条边,那么也就存在个度,如图:将这个度相加后得7,注意到再与根节点A的度相加得10,再加1为节点数11

那么:n=各结点度数之和+1

下图中:度deg简作m

对于这个,我们也可以理解为:这棵树=根节点+森林的形式,森林即"人类社会",根结点为"人神",统计完人类社会后再加上人神这个1即可。

m叉树每层最多节点数

m叉树每层最多节点数:

我们要第三层的节点数最多,那么第二层的节点数也必须达到最多,在前面的基础上,我们要第三层的节点数真的最多,那么应道填满第三层

此性质同时满足于:m叉树与度为m的树

高h的m叉树最多结点数

对于m叉树和度为m的树而言,都是成立的

对于高度为h的m叉树,我们已经知道了其每一层的最多结点数为。对于树而言,高度=深度=层数,那么第h层最多结点数为

那么自第1层到第h层各结点分别为:、、...。我们发现这是一个等比数列,公比为,根据等比数列求和公式,带入得:

高h的m叉树最少结点数

因为m叉树可以使所有结点度小于m,则高度为h的m叉树最少可以有h个结点

高h度m的树最少结点

我们考虑树的最后一层存在m个结点即可,结点最少为:

n结点m叉树最小高度

同理,满结点的情况下,m叉树性质=度为m的树

如图:设最小高度为,最小高度不能比小,也不能比大

情况一:

当第h层的结点数仅为1时,高度h存在最小值,其总结点数

情况二:

当第h层的结点数填满时,高度h存在最大值,其总结点数

那么:

方便计算,略去+1

化简得:

两边取对数:其中,

则左右取整后仅相差1,因为左边<=h,

即

n结点m叉树最大高度

为n

一棵树的结点越少,那么这棵树就越高

n结点度m数=树最大高度
树的性质总结

满结点的情况下(或 度个数越多越好的情况下),m叉树性质=度为m的树性质

二叉树 Binary Tree

二叉树是应用的最广泛的一种树形结构

二叉树的定义
  1. 由n个结点组成的有限集合
  2. n=0时,为空二叉树
  3. n>0时,二叉树由根+互不相交的左子树 和右子树组成(左右子树也是二叉树)
二叉树和度为二的树

|------------|-------------|
| 二叉树 | 度为二的树 |
| 所有结点都可以小于2 | 至少有一个节点的度为2 |
| 有序树,严格区分左右 | 无序树,不区分左右 |

二叉树≠度为2的树≠二叉树

二叉树的基本形态

二叉树的基本形态有五个:空二叉树,根、根+左子树、根+右子树、根+左右子树

任何二叉树都可以由以上五种复合而来

特殊的二叉树
满二叉树

满二叉树就是最"丰满"的二叉树

特征:

所有分支节点都有两个子节点

所有叶节点都在最后一层

或者

满二叉树的结点的度仅有0或2两种情况

完全二叉树

除最后一层外其他层数的结点必须是满的 ;且最后一层可以不满,但必须从左到右连续排列

若最后一层满了,那这颗完全二叉树也是一颗满二叉树

二叉树的性质
结点数之间的关系

设

度为0的结点数 为:

度为1的结点数 为:

度为2的结点数 为:

该二叉树的结点数:

根据树的结点数的性质,结点数n=所有结点度数之和+1

联立:

二叉树每层最多结点数

根据前面的"m叉树每层最多结点数"为:

令,得:

再记二叉树的层数为,则

同理,我们可以进一步得出二叉树最多有多少个结点

根据前面的,h层的m叉树最多有个

令,得:

h层的二叉树最多有个结点

当二叉树为满二叉树时,满二叉树有个结点

完全二叉树的性质
编号性质

首先我们对于一个完全二叉树进行编号。编号的规则是:从上到下,从左到右依次对结点编号为

一、

设对第i个结点,其左孩子的编号为:;右孩子的编号为:;父亲为(下取整)

二、

最后一个分支节点(并非仅指整棵树的末分支节点)的编号为:整个树的编号(或者叫与它相对应的最后一个结点的编号)除以2,即:

既然是最后一个分支节点,那意思等价为:这个结点之后(不包含自己)的所有结点都是叶节点

即:满足,的结点都是分支节点,反之皆为叶节点

度为1的性质

一个完全二叉树,度为1的结点有且仅有1个或0个

叶节点只可能出现在最后两层

完全二叉树叶节点只可能出现在最后两层

具有n个结点的完全二叉树的高度

具有n个结点的完全二叉树的高度**或**

等价:n个结点的二叉树的最小高度

我们设这一完全二叉树的高度为h

情况一:明显,不能存在,这说明要想使树的高度为h,末层就必须至少存在一个结点,那么对于上面层的结点个数为:,再加上第h层的这一个,则有:

情况二:明显,不能存在,这说明想使树的高度为h,末层的结点最多填满而不能继续开辟下一层。那么这时这颗完全二叉树就是一颗满二叉树,则总结点数最多为:

综上有: ①

解法一:将①上式变形为:

进一步:

两边取对数得:

即:

向上取整为:

解法二:将①式变形为:

两边取对数得:

即:

向下取整为:

根据取整函数的平移性,得:

的d

相关推荐
benjormin1 小时前
Java数据结构 二叉搜索树
数据结构·算法
weixin_417396832 小时前
星级酒店境外电视频道怎么合法接入?合规要点与核对清单
开发语言·前端·php·1024程序员节·综合布线
北方的银狐-Zero3 小时前
OntoL 7.0|面向工业多智能体的语义本体套件,让异构系统真正 “看懂彼此”——OntoL的本体产品矩阵
人工智能·mysql·sqlite·1024程序员节·本体论·本体产品
云和数据.ChenGuang4 小时前
深入剖析 Python 的 MRO 规则:从 C3 线性化到实战踩坑
开发语言·python·1024程序员节
OxYGC4 小时前
[Web3] 的⛽ Gas 革命:五大协议群组如何终结“Gas 痛点
web3·1024程序员节·layer2·gas·erc-4337
OxYGC5 小时前
[Web3] 去中心化基石 - BIP铁三角(BIP32/39/44)
web3·1024程序员节·钱包·bip32·bip44
H.莓飛5 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
码少女6 小时前
数据结构——B+树基础
数据结构·b树
智塑未来7 小时前
PTFE线缆膜低介电低损耗特性助力高频毫米波信号传输及行业趋势解析
1024程序员节