数据结构和算法学习记录——平衡二叉树(基本介绍、平衡因子、平衡二叉树的定义、平衡二叉树的高度)

简介: 数据结构和算法学习记录——平衡二叉树(基本介绍、平衡因子、平衡二叉树的定义、平衡二叉树的高度)

基本介绍

什么是平衡二叉树?

以一个例子来解释一下:

搜索树结点按不同的插入次序,将会导致不同的深度和平均查找长度ASL

在二叉搜索树中查找一个元素:

(a)要找到Jan,需要查找一次;要找到Feb,需要查找两次;

要找到Mar,也需要查找两次......要找到Nov,需要查找六次。

把所有查找次数加起来,再除以12,

得到平均查找长度:ASL(a) = ( 1 + 2 * 2 + 3 * 3 + 4 * 3 + 5 * 2 + 6 * 1 ) / 12 = 3.5

(b)要找到July,需要查找一次;要找到Feb,需要查找两次;

要找到May,也需要查找两次......要找到Sept,需要查找四次。

算出平均查找长度:ASL(b) = (1 + 2 * 2 + 3 * 4 + 4 * 5) / 12 = 3.0


(c)要找到Apr,需要查找一次;要找到Aug,需要查找两次......

要找到Sept,需要查找十二次。

算出平均查找长度:ASL(c) = ( 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12) / 12 = 6.5


通过上面的例子,我们可以看到方式b的平均查找长度最短,在观感上结点的分布也比较均匀。

所以二叉树,我们要求比较平衡,才能够让查找的长度更短一些。

而如何衡量一颗二叉树平衡不平衡呢?

  1. 是左右两边的结点数差不多
  2. 是左右两边的高度差不多

这样我们就认为基本上平衡,即为平衡二叉树。

平衡因子

平衡因子(Balance Factor,简称BF):

BF(T) = - , 其中 分别为T的左、右子树的高度。

平衡二叉树

平衡二叉树(Balanced Binary Tree) (AVL树)

空树,或者任一结点左、右子树高度差的绝对值不超过1,即

下面来判断一下以下几颗二叉树是否为平衡二叉树:

(1)

(2)

(3)

先来看第一棵二叉搜索树:

再来看第二棵二叉搜索树:


最后看第三棵二叉搜索树:

平衡二叉树的高度

我们要二叉树平衡,其目的是为了让二叉树的高度更低一些,

越平衡的二叉树高度就越低。

一棵结点总数为n的完全二叉树高度为 h = log2n,

那么平衡二叉树的高度是否能达到 呢?

为 高度为h的平衡二叉树的最少结点数。 结点数最少时:

总结出:

可以得到一个公式:

我们会发现,这个公式有点眼熟,是与斐波那契序列的公式有点像。

从这里我们就来分析一下nh跟斐波那契序列的 有什么关系。

在数学上, 有一个公式:

当i逐步增大时, 大致等于公式算出来的值。

是一个指数函数。

根据我们上面分析出来的 的关系,就可以代入得到 的相关公式。

所以反过来我们就得到h的表达式:

用自己的想法把他推一遍:

综上所述,我们可以得到结论:

给定结点数为n的AVL树的最大高度为


end



 

目录
相关文章
|
11月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
709 1
|
11月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
280 0
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
454 3
 算法系列之数据结构-Huffman树
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
620 22
|
8月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
743 0
|
8月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
471 2
|
9月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
380 3
|
8月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
365 8

热门文章

最新文章