【数据结构】二叉排序树——平衡二叉树的调整

这篇具有很好参考价值的文章主要介绍了【数据结构】二叉排序树——平衡二叉树的调整。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


参考视频:
懒猫老师-数据结构-(59)平衡二叉树【互动视频】

前置概念

(1)什么是平衡二叉树

平衡二叉树(Balanced Binary Tree)是一种特殊的二叉查找树,它的目的是保持树的高度尽量平衡,以保证查找、插入、删除等操作的时间复杂度为 O(log n)。

常见的平衡二叉树算法包括 AVL 树、红黑树、伸展树等。这些算法通过记录每个节点的平衡因子或颜色,并在必要时通过旋转或重新着色来调整树的形态,以保持树的平衡。平衡二叉树的应用非常广泛,用于实现高效的数据结构,例如字典、集合等。

(2)如何判断一棵树是否是平衡二叉树

判断一棵树是否是平衡二叉树的方法有多种,具体的方法取决于具体的平衡二叉树算法。
以 AVL 树为例,判断一棵树是否是 AVL 树的方法是:

  • 定义节点的高度:对于任意一个节点,它的高度等于它的左右子树的高度的最大值加 1。
  • 定义节点的平衡因子:对于任意一个节点,它的平衡因子等于它左子树的高度减去它右子树的高度。
  • 判断树是否平衡:对于任意一个节点,它的平衡因子的绝对值不大于 1。如果树中的所有节点都满足平衡因子的绝对值不大于 1,那么这棵树就是一棵 AVL 树。

对于其他平衡二叉树算法,如红黑树和伸展树,判断方法也有所不同,但是基本思想都是一样的:通过检查树中每个节点的相关信息(例如颜色或平衡因子),来判断树是否平衡。

(3)最小不平衡子树

最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因子的绝对值大于1的结点为根的子树。

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

例如上图,此处4就是最小不平衡子树的根节点。

一、构造平衡二叉树的基本思想

每插入一个结点,

  • 从插入结点向上计算各结点的平衡因子,如果某结点的平衡因子的绝对值大于1,则说明插入操作破坏了二叉排序树的平衡性,需要进行平衡调整;否则继续执行插入操作。
  • 如果二叉排序树不平衡,则找出最小不平衡子树的根节点,根据新插入结点与最小不平衡子树根节点的关系判断调整类型。
  • 根据调整类型进行相应的调整,使之成为新的平衡子树。

二、一个示例

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

三、平衡二叉树的调整细节

设结点A为最小不平衡子树的根结点,对该子树平衡调整有以下四种情况:

  1. LL型
  2. RR型
  3. LR型
  4. RL型

(1)LL型(顺时针 )

插入结点X之后,这棵二叉树不平衡了。B结点的平衡因子变成1(h+1-h),A结点的平衡因子变成2(h+2-h)。这里我们称X结点为问题的发生者;A结点为问题的发现者。从问题的发现者A结点到问题的发生者要经过左子树的左子树(即LL)

现在A发现二叉树不平衡了,就需要对二叉树进行调整。

旋转:扁担原理; 冲突:旋转优先

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

利用扁担原理,A结点的左右子树不平衡了:左子树“重”,右子树“轻”。那么我们把B结点往上抬,A结点往下压(进行了一个顺时针旋转),A结点变成了B结点的右子树,B结点原来的右子树调整为A结点的左子树(B结点的右子树上的所有结点一定小于A结点,所以将B原来的右子树调整为A结点的左子树是最合适的)。

举例

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

(2)RR型(逆时针)

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

(3)LR型(先逆时针再顺时针)

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

理解记忆:想象我们正在背一个扁担,发现左边重,但对于左边来说,左边的右边又比较重,所以这个LR型调整成平衡二叉树更为复杂。我们先需要对左边好好调整一番,规整一下(逆时针旋转),调整成LL型,让所有重量完全彻底地压到左边。接着对得到的LL型一次性向右调整(顺时针旋转)。

举例

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

(4)RL型(先顺时针再逆时针)

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

(5)四种调整类型总结

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

四、例题

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

解题过程

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

  • 找到最小不平衡子树的根结点:5

  • 判断类型:从问题的发现者开始到问题的发生者,先左后右,画圈的为RL型不平衡树。注意:下面对画圈的部分独立操作。

  • 将RL型的不平衡树进行顺时针旋转变成RR型
    平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

  • 插入结点9,发现二叉树又不平衡了,找到最小不平衡子树的根结点:4

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

  • 判断类型:RR型不平衡树
  • 对RR型不平衡树进行逆时针旋转

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树

平衡二叉树的调整方法,算法,数据结构,二叉树,平衡二叉树文章来源地址https://www.toymoban.com/news/detail-757142.html

到了这里,关于【数据结构】二叉排序树——平衡二叉树的调整的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】【算法】二叉树、二叉排序树、树的相关操作

    树结构是以分支关系定义的一种层次结构,应用树结构组织起来的数据,逻辑上都具有明显的层次关系。 操作系统中的文件管理系统、网络系统中的域名管理、数据库系统中的索引管理等都使用了树结构来组织和管理数据。 树 Tree 是由n个节点组成的有限集合。在任意一颗非

    2024年02月04日
    浏览(40)
  • 数据结构学习记录——平衡二叉树的调整(基本介绍、右单旋、左单旋、左右双旋、右左双旋、平衡因子的计算)

    目录 基本介绍 右单旋 左单旋 左右双旋 右左双旋  平衡因子的计算 首先,平衡二叉树也是一棵二叉搜索树。 当我们在一棵平衡二叉树进行插入或者删除时,可能会把原来的平衡二叉树变得不平衡, 这个时候我们就需要进行调整了。 平衡二叉树的调整主要分为四大类: RR旋

    2023年04月27日
    浏览(26)
  • 数据结构----完全二叉树的时间复杂度讲解,堆排序

    目录 一.建堆的时间复杂度 1.向上调整算法建堆 2.向下调整算法建堆 二.堆排序 1.概念 2.代码思路 3.代码实现 我们就以极端情况考虑时间复杂度(满二叉树+遍历所有层) 假设所有节点个数为N,树的高度为h N = 2^0+2^1+2^2......+2^(h-1) 即N = 2^h - 1 h = log(N+1) 时间复杂度我们以交换次数为

    2024年03月14日
    浏览(54)
  • 数据结构(C语言实现)——二叉树的概念及二叉树顺序结构和链式结构的实现(堆排序+TOP-K问题+链式二叉树相关操作)

    前面学习了数据结构中线性结构的几种结构,顺序表,链表,栈和队列等,今天我们来学习一种非线性的数据结构——树。由于二叉树是数据结构中的一个重点和难点,所以本文着重介绍二叉树的相关概念和性质,以及二叉树的应用。 树是一种非线性的数据结构,它是由n(

    2023年04月21日
    浏览(35)
  • 数据结构:搜索二叉树 | 平衡二叉树

    博客写的代码都放在这里:gitee仓库链接 1.二叉搜索树 1.1.基本概念 二叉搜索树又称二叉排序树, 可以为空,如果不为空具有以下性质的二叉树 : 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的

    2024年01月23日
    浏览(45)
  • 数据结构-----平衡二叉树

      目录 前言 1.平衡二叉树 1.1概念与特点 1.2与二叉排序树比较 1.3判断平衡二叉树 2.平衡二叉树的构建 2.1平衡因子 BF 2.2 LL型失衡(右旋) 2.3 RR型失衡(左旋) 2.4 LR型失衡(先左旋再右旋)  2.5 RL型失衡(先右旋再左旋) 2.6构建平衡二叉树代码实现  3.删除节点操作 3.1删除叶

    2024年04月13日
    浏览(25)
  • 【数据结构】平衡二叉树

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、平衡二叉树的介绍 二、平衡二叉树的插入 1、平衡二叉树的插入步骤 2、平衡二叉树的旋转 2.1左单旋 2.2右单旋 2

    2024年02月03日
    浏览(75)
  • 数据结构之二叉树和平衡二叉树

    1、二叉树: 2、平衡二叉树:

    2024年04月17日
    浏览(33)
  • 数据结构之平衡二叉树详解

    平衡二叉树(balanced binary tree) 又称AVL树(Adelson-Velskii and Landis) 一棵平衡二叉树或者是空树,或者是具有下列性质的 二叉排序树 :         1,左子树与右子树的高度之差的绝对值小于等于1;         2,左子树和右子树也是平衡二叉排序树. 为了方便起见,给每

    2024年02月03日
    浏览(35)
  • 【数据结构】树、二叉树的概念和二叉树的顺序结构及实现

    之前我们学习了顺序表、链表以及栈和队列这些数据结构,但这些数据结构都是线性的(一对一)。接下来要学习 非线性的数据结构——树(二叉树) ,相比前面的,树的结构更加复杂,话不多说,直接进入正题吧。 树是一种 非线性的数据结构 ,它是 一对多(也有可能是

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包