欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

408 数据结构--二叉树的概念、性质和存储结构 自学知识结构

最编程 2024-05-03 18:35:16
...

前置知识:树的基本概念与性质


二叉树的定义

二叉树是一种特殊的树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于 2 2 2的结点),并且二叉树是有序树,左右子树不能互换。
与树类似,二叉树也以递归形式定义。二叉树是 n n n n ≥ 0 n≥0 n0)个结点的有限集合。当 n = 0 n=0 n=0时,称为空二叉树
n ≠ 0 n≠0 n=0时,二叉树由根结点和两个互不相交的子树组成,左子树和右子树又分别是一棵二叉树。即使树中结点只有一棵子树,因为二叉树有序,也要区分是左子树还是右子树。
二叉树与度为 2 2 2的有序树的区别:

  • 度为 2 2 2的有序树至少有 3 3 3个结点,而二叉树可以为空。
  • 度为 2 2 2的有序树的孩子的左右次序是相对于另一个孩子而言的,若某一结点只有一个孩子结点,则无需区分其左右。而对二叉树上的结点来说,无论其孩子数是否为 2 2 2,均需确定其左右次序。即二叉树的结点次序不是相对于另一个结点而言的,而是确定的。

几种特殊的二叉树

Man! 满二叉树

一棵高度为 h h h,且有 2 h − 1 2^h-1 2h1个结点的二叉树被称为满二叉树。
因为对一个满二叉树来说,第 i i i层有 2 i − 1 2^{i-1} 2i1个结点,一共有 h h h层,则求和结果就是 2 h − 1 2^h-1 2h1
满二叉树的特点:

  1. 只有最后一层有叶子结点。
  2. 不存在度为 1 1 1的结点。
  3. 若层序从 1 1 1开始编号,则对第 i i i个结点,其左孩子必为第 2 i 2i 2i个结点,右孩子必为第 2 i + 1 2i+1 2i+1个结点。如果结点 i i i存在双亲结点,则其双亲必为第 ⌊ i / 2 ⌋ \left\lfloor i/2 \right\rfloor i/2个结点(即对 i / 2 i/2 i/2向下取整)。

(下图来自王道考研408数据结构课程视频 - 二叉树的定义和基本术语
图片源自王道考研408数据结构课程视频

完全二叉树

一棵高度为 h h h、有 n n n个结点的二叉树,当且仅当其每个结点都与高度为 h h h的满二叉树中编号为 1 − n 1-n 1n的结点一一对应时,称为完全二叉树
完全二叉树的特点:

  1. 只有最后两层(层数最大的两层)可能有叶子结点。
  2. 最多只有一个度为 1 1 1的结点,且该结点只有左孩子而无右孩子。
  3. 层序从 1 1 1开始编号,则对第 i i i个结点,其左孩子必为第 2 i 2i 2i个结点,右孩子必为第 2 i + 1 2i+1 2i+1个结点。如果结点 i i i存在双亲结点,则其双亲必为第 ⌊ i / 2 ⌋ \left\lfloor i/2 \right\rfloor i/2个结点。(同满二叉树)
  4. 对结点 i i i,当 i ≤ ⌊ n / 2 ⌋ i≤ \left\lfloor n/2 \right\rfloor in/2时,该结点为分支结点;当 i > ⌊ n / 2 ⌋ i> \left\lfloor n/2 \right\rfloor in/2时,该结点为叶结点。
  5. n n n为奇数,则每个分支结点都有左孩子和右孩子;若 n n n为偶数,则编号最大的分支结点(编号为 n / 2 n/2 n/2)只有左孩子,没有右孩子,其余分支结点均有左、右孩子。

二叉排序树⭐

左子树上所有结点的关键字均小于根结点的关键字,右子树上所有结点的关键字均大于根结点的关键字,左右子树又各是一棵二叉排序树,这样的二叉树被称为二叉排序树

平衡二叉树⭐

树中任意一个结点的左子树和右子树的高度之差的绝对值不超过 1 1 1,这样的二叉树称为平衡二叉树
如果一棵二叉排序树是平衡的,那么它的搜索效率会高很多。

关于二叉排序树和平衡二叉树,后续章节会有详细介绍,现在暂时了解其概念即可。

正则二叉树

树中每个分支结点都有 2 2 2个孩子,即树中只有度为 0 0 0 2 2 2的结点。


二叉树的性质相关

常见考点1:非空二叉树上的叶结点数等于度为 2 2 2的结点数加 1 1 1,即 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1

假设树中结点总数为 n n n,度为 0 0 0的结点数为 n 0 n_0 n0,度为 1 1 1的结点数为 n 1 n_1 n1,度为 2 2 2的结点数为 n 2 n_2 n2。则有:
n = n 0 + n 1 + n 2 n=n_0+n_1+n_2 n=n0+n1+n2
n = n 1 + 2 n 2 + 1 n=n_1+2n_2+1 n=n1+2n2+1(树的结点数=总度数+1)
联立两式,得 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
这一个考点常在选择题中涉及,需要牢记并灵活应用。

常见考点2:非空二叉树的第 i i i层至多有 2 i − 1 2^{i-1} 2i1个结点( i ≥ 1 i≥1 i1

树的基本概念与性质可知, m m m叉树的第 i i i层至多有 m i − 1 m^{i-1} mi1个结点( i ≥ 1 i≥1 i1),令 m = 2 m=2 m=2即可。

常见考点3:高度为 h h h的二叉树至多有 2 h − 1 2^h-1 2h1个结点( h ≥ 1 h≥1 h1

树的基本概念与性质可知,高度为 h h h m m m叉树至多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m1mh1个结点( i ≥ 1 i≥1 i1),令 m = 2 m=2 m=2,得有 2 h − 1 2^h-1 2h1个(满二叉树)。

完全二叉树的性质相关

常见考点1:具有 n n n个结点( n > 0 n>0 n0)的完全二叉树的高度 h h h ⌈ log ⁡ 2 ( n + 1 ) ⌉ \left\lceil {{\log }_{2}}\left( n+1 \right) \right\rceil log2(n+1) ⌊ log ⁡ 2 n ⌋ + 1 \left\lfloor {{\log }_{2}}n \right\rfloor +1 log2n+1

由完全二叉树的已知性质,假设完全二叉树的高度为 h h h,则有

2 h − 1 − 1 < n ≤ 2 h − 1 {{2}^{h-1}}-1<n\le {{2}^{h}}-1 2h11<n2h1 2 h − 1 ≤ n < 2 h {{2}^{h-1}}\le n<{{2}^{h}} 2h1n<

上一篇: [数据结构] 算法的效率(时间复杂性和空间复杂性) - V.oj 习题的复杂性

下一篇: 第 2 章 CCNA 测试问题和答案