algorithm
  • README
  • 算法题目
    • Page 1
  • 算法基础
    • 堆(大/小顶堆 、优先队列)
      • swift
      • js
      • C++
    • 哈希表(HashTable)
      • 线性探测
        • 稠密哈希表
        • 密集探测哈希表vs线性探测哈希表
      • C拉链法
        • 拉链法是否需要根据负载因子扩容?
      • set的实现
      • map的实现
    • 二叉树
      • 类型
        • AVL树和红黑树的关系与区别比较
      • 存储方式
      • 遍历
        • 前中后序遍历(深度)
          • 递归方式
          • 迭代法
        • 层次遍历(广度)
      • 二叉搜索树
        • 基本概念
        • 代码实现
      • AVL树
        • 基本概念
        • 代码实现
        • 疑问
          • AVL为什么LL的时候右转呢?
          • AVL树中的LR的情况
          • AVL树的调整
          • 删除节点的逻辑
      • 红黑树
        • 基本概念
        • 代码实现
        • 疑问
          • 红黑树和AVL的关系与区别
          • 红黑树和哈希表的关系与区别
          • 为什么有红黑树,比AVL优势在哪里?
    • 运算符
      • 交换两个数(不用临时变量)
  • leetcode结构
    • Javascript
      • 优先队列
    • C++
  • 公司面试题目
    • 汇丰银行
      • 跑步同一个脚印问题
      • 销售系统问题
Powered by GitBook
On this page
  1. 算法基础
  2. 二叉树
  3. AVL树
  4. 疑问

AVL树中的LR的情况

在AVL树中,LR(左右)情况是一种不平衡状态,通常发生在插入一个节点后,导致某个节点的左子树的右子节点导致不平衡。以下是对LR情况的详细解释,包括其特征、处理方法和示例。

LR情况的特征

  1. 结构:

    • 假设不平衡节点为 A,其左子节点为 B,而 B 的右子节点为 C。

    • 这个结构如下:

        A
       /
      B
       \
        C
  2. 不平衡原因:

    • 插入节点 C,使得 A 的平衡因子变为大于1。这表明左子树的高度较高,但右子树的高度相对较低。

处理LR不平衡的步骤

  1. 左旋转 B:

    • 先对节点 B 进行左旋转,使 C 成为 B 的父节点。结果是 C 成为 B 的新父节点,同时 B 变为 C 的左子节点:

        A
       /
      C
     /
    B
  2. 右旋转 A:

    • 然后对不平衡节点 A 进行右旋转,使得 C 成为新的根节点,最终结构变为:

        C
       / \
      B   A

示例

假设插入节点的顺序为 30, 10, 20:

  1. 插入 30:

        30
  2. 插入 10:

        30
       /
      10
  3. 插入 20:

        30
       /
      10
        \
        20

    在这个结构中,节点 30 的平衡因子为 2(左子树高度为2,右子树高度为0),表明不平衡。

处理步骤

  1. 左旋转 B(即 10),得到:

        30
       /
      20
     /
    10
  2. 右旋转 A(即 30),最终得到:

        20
       /  \
      10   30

总结

LR情况是AVL树中的一种不平衡状态,需要通过先左旋再右旋的方式来恢复平衡。这种处理方式有效地将造成不平衡的右子节点提升到合适的位置,同时保持二叉搜索树的性质,使得查找、插入和删除操作保持在 (O(\log n)) 的时间复杂度内。

PreviousAVL为什么LL的时候右转呢?NextAVL树的调整

Last updated 7 months ago