IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 平衡二叉树旋转原理【超详细解读】 -> 正文阅读

[数据结构与算法]平衡二叉树旋转原理【超详细解读】

1. 理解前的知识储备

  • 二叉排序树

    通常二叉排序树呈现的特点是左子树元素值<根节点值<右子树元素值

    右子树元素全部大于左子树元素及根节点;左子树元素全部小于右子树元素及根节点

  • 平衡二叉树

    左右子树高度差小于等于1二叉排序树

  • 最小不平衡树

    一棵二叉排序树中左右子树高度差大于1的最小单位树。平衡二叉树插入新节点后只可能出现一棵最小不平衡树,经过平衡调整后的平衡二叉树不存在最小不平衡树

    以下是两个例子,红笔圈起来的部分即最小不平衡树

    image-20211107155253626

2.LL旋转

新节点添加在最小不平衡树根节点的左孩子的左子树且造成不平衡时使用此旋转

操作

  1. 确定最小不平衡树在整棵树中的位置

  2. 定位到此树根节点R左节点P,目标是让P成为最终的根节点

  3. 左节点P进行右旋转【即让P去到根节点R的位置,根节点R下沉到右节点】,此操作不会破坏二叉排序树的结构

  4. 左节点P有右子树,则一并放到旋转后的根节点R的左边

    这里用到了二叉排序树右子树大于左子树的性质,因为原先P的右子树属于根节点R的左子树,所以P的右子树中所有节点值必定小于根节点R以及根节点R的右子树。

    经过旋转后,根节点R成为了P的右子树,而原先P的右子树必然是比P大且小于根节点R的,所以原先P的右子树放在P的右边,根节点R的左边

    image-20211107162215532

3.RR旋转

新节点添加在最小不平衡树根节点的右孩子的右子树且造成不平衡时使用此旋转

操作

  1. 确定最小不平衡树在整棵树中的位置

  2. 定位到此树根节点R右节点P,目标是让P成为最终的根节点

  3. 右节点P进行左旋转【即让P去到根节点R的位置,根节点R下沉到左节点】,此操作不会破坏二叉排序树的结构

  4. 右节点P有左子树,则一并放到旋转后的根节点R的右边

    这里用到了二叉排序树左子树小于右子树的性质,因为原先P的左子树属于根节点R的右子树,所以P的左子树中所有节点值必定大于根节点R以及根节点R的左子树。

    经过旋转后,根节点R成为了P的左子树,而原先P的左子树必然是比P小且大于根节点R的,所以原先P的左子树放在P的左边,根节点R的右边

    image-20211107163200253

4.LR旋转

新节点添加在最小不平衡树根节点的左孩子的右子树且造成不平衡时使用此旋转

操作

  1. 确定最小不平衡树在整棵树中的位置

  2. 定位到此树根节点R左节点L右孩子P,目标是让P成为最终的根节点

  3. 先将P左旋转到L的位置,此时将P记作Q

  4. 再将Q右旋转到R的位置

  5. 同理,若Q有右子树,则将此右子树一并放入到旋转后根节点R的左边

    原理同LL与RR旋转,可仔细体会上述解释过程

    image-20211107164727809

5. RL旋转

新节点添加在最小不平衡树根节点的右孩子的左子树且造成不平衡时使用此旋转

操作

  1. 确定最小不平衡树在整棵树中的位置

  2. 定位到此树根节点R右节点L左孩子P,目标是让P成为最终的根节点

  3. 先将P右旋转到L的位置,此时将P记作Q

  4. 再将Q左旋转到R的位置

  5. 同理,若Q有左子树,则将此左子树一并放入到旋转后根节点R的右边

    原理同LL与RR旋转,可仔细体会上述解释过程

image-20211107165521997

6. 总结

平衡二叉树的旋转不需要死记,千万不要被通篇的左右子树给弄迷糊了,建议可以画图进行步骤阅读,结合二叉排序树的性质可以更好的进行理解,若这篇文章对你有所帮助的话,不放给个免费的赞支持一下。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:25:52  更:2022-03-17 22:27:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:46:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码