【平衡二叉树的平衡调整-----------理论】

news/2024/10/17 6:23:10/

1平衡二叉树的基本概念

1.1回顾二叉排序树的查找

在这里插入图片描述
由于形态不均匀的二叉排序树查找效率不高,为了解决这个问题,我们引入了平衡二叉树

1.2平衡二叉树的定义

在这里插入图片描述

1.3平衡二叉树的 平衡因子(BF)

在这里插入图片描述
在这里插入图片描述
分为3种情况:
根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能是以下三种情况
-1:结点左子树的高度 小于 结点右子树的高度
0:结点左子树的高度 等于 结点右子树的高度
1:结点左子树的高度 大于 结点右子树的高度

以下是两个实例:
在这里插入图片描述
计算如下:
在这里插入图片描述

在这里插入图片描述

2.平衡调整方法:

当我们在一个平衡二叉排序树上插入一个结点时有可能导致失衡,即出现平衡因子绝对值大于1的结点,如:2、-2.

比如:
在这里插入图片描述
如果在一颗AVL树中插入一个新结点后造成失衡,则必须重新调整树的结构,使之恢复平衡

2.1平衡调整的四种类型:

2.1.1引入:

在这里插入图片描述
如上图所示:

A:失衡结点不止一个失衡结点时,为最小失衡子树的根结点
(比如右边那棵树:结点7开始的失衡子树共有5个结点,而从16开始的失衡子树共有3个结点,此时失衡结点为16)

B: A(失衡结点)的孩子,C(新插入结点的双亲)
C: 插入新结点的子树新插入的结点是C结点

2.1.2平衡调整的四种类型 与手动计算调平后的失衡子树结构:

在这里插入图片描述

2.1.2.1 根据A、B、C的关系确定失衡类型

LL(Left-Left)型失衡

  • 描述:在插入或删除节点后,新插入的节点位于失衡节点的左孩子的左子树上(可以是失衡结点左子树的左子树旳根),导致该失衡节点左子树比右子树高2
  • 解决:通过一次右旋操作来恢复平衡。

RR(Right-Right)型失衡
描述:在插入或删除节点后,新插入的节点位于失衡节点的右孩子的右子树上(可以是失衡结点左子树的左子树旳根),导致该失衡节点右子树比左子树高2。
解决:通过一次左旋操作来恢复平衡。

LR(Left-Right)型失衡

  • 描述:在插入或删除节点后,新插入的节点位于失衡节点的左孩子的右子树上(可以是失衡结点左子树的右子树旳根),导致该失衡节点的左子树比右子树高1。
  • 解决:首先对失衡节点的左子节点进行左旋操作,然后对失衡节点进行右旋操作来恢复平衡。

RL(Right-Left)型失衡

  • 描述:在插入或删除节点后,新插入的节点位于失衡节点的右孩子的左子树上(可以是失衡结点右子树的左子树旳根),导致该失衡节点的右子树比左子树高1。
  • 解决:首先对失衡节点的右子节点进行右旋操作,然后对失衡节点进行左旋操作来恢复平衡。
2.1.2.2直接获得调平树的手动计算方法

调整原则:
(1)降低高度:
(2)保持二叉排序树的性质

获得插入后平衡结构的核心方法为:

  • 定根:中序遍历失衡子树,其中中间结点为调整后的根结点
  • 定左孩子:为失衡子树中序遍历后中间结点前驱
  • 定右孩子:为失衡子树中序遍历后中间结点后继

同样以上述四种基本类型进行实例分析:
在这里插入图片描述

2.1.2.3调整平衡的一般方法
2.1.2.3.1根据失衡结点与其左右孩子结点的平衡因子来判断失衡类型

在这里插入图片描述
分析如下:

  • ①失衡结点平衡因子等于2:证明左子树高于右子树,故为L ?

  • [1]左孩子平衡因子为1:证明左孩子的左子树高于右子树,故为LL

  • [2]左孩子平衡因子为-1:证明左孩子的左子树低于右子树,故为LR


  • ②失衡结点平衡因子等于-2:证明左子树低于右子树,故为R ?

  • [1]左孩子平衡因子为1:证明左孩子的左子树高于右子树,故为RL

  • [2]右孩子平衡因子为-1:证明右孩子的左子树低于右子树,故为RR

2.1.2.4左旋转:操作对象为RR型

核心操作:冲突的左孩变为右孩

实例1(直接旋转的实例):
在这里插入图片描述
在这里插入图片描述
调平好的平衡二叉树与原失衡的平衡二叉树中序遍历序列等价
在这里插入图片描述

实例2:(冲突的左孩子变为右孩子)
若旋转的失衡结点同时有左右孩子
则在左旋转的过程中,由之前的定根方法,
我们发现:新的根结点(失衡结点的右孩子)的左孩子与旋转结点的左孩子发生了冲突,
此时应该将新的根结点的左孩子作为
旋转后的失衡结点的右孩子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调平好的平衡二叉树与原失衡的平衡二叉树中序遍历序列等价
在这里插入图片描述

2.1.2.5右旋转:操作对象为LL型

核心操作:冲突的右孩变为左孩

实例1(直接旋转的实例):

在这里插入图片描述
在这里插入图片描述
调平好的平衡二叉树与原失衡的平衡二叉树中序遍历序列等价
在这里插入图片描述
实例2:(冲突的右孩子变为左孩子)与左旋十分类似
则在右旋转的过程中,由之前的定根方法,
我们发现:新的根结点(失衡结点的左孩子)的右孩子与旋转结点的右孩子发生了冲突,
此时应该将新的根结点的右孩子作为
旋转后的失衡结点的左孩子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调平好的平衡二叉树与原失衡的平衡二叉树中序遍历序列等价
在这里插入图片描述

小结:
在这里插入图片描述

2.1.2.6左旋左孩子,然后右旋:操作对象为LR型

(插入结点在失衡结点的左孩子的右子树上)

实例1:左旋孩子时(注意冲突的左孩变右孩),右旋失衡结点时(注意冲突的右孩变左孩)

【1】左旋左孩子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
【2】右旋失衡结点:
在这里插入图片描述
在这里插入图片描述

2.1.2.7右旋右孩子,然后左旋:操作对象为RL型

(插入结点在失衡结点的右孩子的左子树上)

实例1:右旋孩子时(注意冲突的右孩变左孩),左旋失衡结点时(注意冲突的左孩变右孩)

【1】右旋孩子结点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【2】左旋失衡结点:
在这里插入图片描述
在这里插入图片描述

2.1.2.8二叉平衡树的插入注意事项:

在这里插入图片描述
实例如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.2.9二叉平衡树的删除结点注意事项:

删除结点后,可能不止会调整一次失衡,故需要依次沿着祖先,依次向上检查调整
在这里插入图片描述


http://www.ppmy.cn/news/1539650.html

相关文章

LabVIEW智能可变温循环PCT测试系统

LabVIEW智能可变温循环PCT测试系统 随着科技的不断发展,实验室测试和质量控制已经成为科学研究和工业制造中不可或缺的一部分。在实验室测试中,PCT测试系统是一种常用的质量控制工具,通过测量材料的热传导系数来评估材料的性质。然而&#x…

QCC308x headset 做同时双向输出音频

QCC308x headset 做同时双向输出音频 /****************************************************************************** Copyright (c) 2014 - 2015 Qualcomm Technologies International, Ltd. FILE NAME audio_output.h DESCRIPTION Plugin that implements multichannel…

Dockerfile最佳实践:如何创建高效的容器

在微服务和云计算时代,Docker就已经成为应用开发和部署不可或缺的工具。如今虽处大模型时代,但这些基础技术仍然是我们需要掌握的。 容器化允许开发者将应用程序及其依赖打包到一个单一的、可移植的单元中,确保了可预测性、可扩展性和快速部…

vue实现文件预览和文件上传、下载、预览——多图、模型、dwg图纸、文档(word、excel、ppt、pdf)

整体思路(模型特殊不考虑,别人封装不具备参考性) 图片上传采用单独的组件,其他三种类型采用一个上传组件(仅仅文件格式不同)文件上传采用前端直接上传阿里云的方式图片预览使用elementUI自带的image预览dw…

利用python实现把视频转换成gif图形

将视频转换为 GIF 图形的重要性不言而喻。在信息快速传播和多种社交平台广泛应用的背景下,GIF 动画不仅为个人用户提供了一种轻松的表达方式,也为商业营销和品牌推广创造了巨大的价值。随着技术的发展,GIF 的创作和应用将更加广泛&#xff0c…

装饰器模式知识分享:Android (Kotlin) 与 iOS (Swift) 实现

装饰器模式(Decorator Pattern)是一种非常重要的设计模式,它允许我们在不修改已有对象的情况下,动态地为其添加新的行为和功能。 这种模式广泛用于 Android 和 iOS 的开发中,特别是在我们想要扩展现有功能,…

网络七层架构

目录标题 网络七层架构从正确认识网络七层架构开始 网络七层架构 简介: 网络七层架构是指ISO/OSI模型,它是国际标准化组织(ISO)制定的一种用于计算机网络体系结构的参考模型。该模型将计算机网络的功能划分为七个层次&#xff0c…

windows 导出 oracle DMP文件

1.dba登录oracle sqlplus /orcl as sysdba 2.创建目录 授权目录 create directory bluesys1016 as C:\bluesys\DemoData; grant read,write on directory bluesys1016 to bluesys; 3.退出sqlplus exit 4.执行expdp expdp bluesys/bluesysorcl directorybluesys1016 dumpfil…