👍数据结构——树(c)
文章目录
一、树
1.树的定义
树 是n(n>=0)个结点的有限集合(可以是空集),在任一棵非空树中:
(1)有且仅有一个称为根的结点
(2)其余结点可分为互不相交的子集,而且这些子集本身又是一棵树,称为根的子树。
空树:结点数为0的树。
从逻辑结构看:
(1)树中只有树根没有父结点,除树根外,其余结点都有且仅有一个父结点
(2)树中的结点,可以有零个或多个孩子结点,没有孩子的结点称为叶子结点,或终端结点
(3)除根外的其他结点,都存在唯一一条从根到该结点的路径
2.基本术语
树的结点:包含一个数据元素及若干指向子树的分支
祖先结点:从根到该结点所经分支上的所有结点
子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙
父结点 / 双亲结点:B是A的孩子,则A是B的父亲
孩子结点:结点的子树的根称为该结点的孩子
兄弟结点:同一双亲的孩子结点
堂兄弟结点:其父结点在同一层上的结点
两个结点之间的路径:只能从上往下
路径长度:路径经过的边数
树的路径长度:是指从根结点到树中每个叶结点的路径长度之和
属性:
结点的层次(深度):从上往下数(第几层)
结点的高度:从下往上数
树的高度(深度):总共多少层
结点的度:结点的孩子数目
树的度:各结点的度的最大值
有序树:从逻辑上看,树中结点的各子树从左至右是有次序的,不能互换。
无序树:从逻辑上看,树中结点的各子树从左至右是无次序的,可以互换。
树:n(n>=0)个结点的有限集合(可以是空树)。
森林:m(m>=0)棵互不相交的树的集合(可以是空森林)。
3.树的性质
1.结点数 = 总度数 + 1
2.树的度为m与m叉树:
度为m的树 | m叉树 |
---|---|
任意结点的度<=m(最多m个孩子) | 任意结点的度<=m(最多m个孩子) |
至少有一个结点度=m | 允许所有结点的度都<m |
一定是非空树,至少有m+1个结点 | 可以是空树 |
第 i 层至多有 m i − 1 m^{i-1} mi−1个结点(i>=1) | 第 i 层至多有 m i − 1 m^{i-1} mi−1个结点(i>=1) |
高度为h的度为m的树至多有 m h − 1 m − 1 \displaystyle\frac{m^h-1}{m-1} m−1mh−1个结点 | 高度为h的m叉树至多有 m h − 1 m − 1 \displaystyle\frac{m^h-1}{m-1} m−1mh−1个结点 |
高度为h的度为m的树至少有h+m-1个结点 | 高度为h的m叉树至少有h个结点 |
有n个结点的m叉树的最小高度为 ⌈ l o g m ( n ( m − 1 ) + 1 ) ⌉ ⌈log_m(n(m-1)+1)⌉ ⌈logm(n(m−1)+1)⌉ |
4.树的基本运算
1.求树的根结点
2.求树的高度
3.找指定结点的父结点
4.找指定结点的孩子结点
5.在树中插入、删除一个结点
6.遍历树
7…
5.表示
- 嵌套集合形式。
- 广义表形式:根作为由子树森林组成的表的名字写在表的左边。
- 凹入表示法。(类似于书的编目)
二、二叉树
1.二叉树的定义
二叉树 要么为空,要么由根节点、左子树和右子树组成。
注:
①左、右子树本身。
②二叉树的子树有严格的左右之分,而树没有(二叉树是有序树)。
度为2的有序数不等同于二叉树:
①度为2的树至少有3个结点,二叉树可以为空。
②结点的位置:
度为2的有序数的孩子的左右次序是相对于另一孩子而言的,若某个结点只有一个孩子,则这个孩子就无需区分其左右次序。
二叉树则无论孩子个数是否为2,均需确定其左右次序,即二叉树的结点次序是确定的。
2.几种特殊的二叉树
(1)满二叉树 一颗深度为 k 且有 2 k − 1 \ 2^{k}-1\, 2k−1个结点的二叉树。
特点:
①只有最后一层有叶子结点
②不存在度为1的结点
③按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,结点i的父结点为⌊i/2⌋
(2)完全二叉树 深度为 k 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为 k 的满二叉树中编号从 1 ~ n 的结点一一对应时,称之为完全二叉树。
特点:
①只有最后两层可能有叶子结点
②最多只有一个度为1的结点,且该结点只有左孩子,而无右孩子
③若n为奇数,则每个分支都有左孩子和右孩子,若n为偶数,则编号最大的分支结点(n/2)只有左孩子,没有右孩子。
④按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,结点i的父结点为⌊i/2⌋
⑤i≤⌊n/2⌋为分支结点,i>⌊n/2⌋为叶子结点。一旦出现某个结点i为叶结点或只有左孩子,则编号大于i的结点均为叶结点。
(3)二叉排序树 一棵二叉树或者空二叉树,或者是具有如下性质的二叉树:
①左子树上所有结点的关键字均小于根结点的关键字
②右子树上所有结点的关键字均大于根结点的关键字
③左子树和右子树又各是一颗二叉排序树
注:二叉排序树可用于元素的排序、搜索。
(4)平衡排序树 树上任一结点的左子树和右子树的深度之差不超过1。
注:平衡二叉树具有更高的搜索效率。
3.性质
(1)二叉树
① 在二叉树的第 i 层上至多有 2 i − 1 \ 2^{i-1}\, 2i−1个结点
② 深度为 h 的二叉树至多有 2 h − 1 \ 2^{h}-1\, 2h−1个结点
③ 任何一个二叉树中度为2的结点数目比度为0的结点数目少1。(可推广度为3…n)
即:设非空二叉树中度为0、1、2的结点个数分别为 n 0 、 n 1 、 n 2 n_0、n_1、n_2 n0、n1、n