• 平衡二叉树的插入,删除以及平衡调整。


    一,平衡二叉树插入失衡情况及解决方案

    由于各种的插入导致的不平衡,每次调整都是最小不平衡子树。
    LL:由于在结点A的 左孩子的左子树 插入结点导致失衡。

      右单旋:①将A的 左孩子B 向右上旋转 代替A成为根节点
          ②将A结点 向右下旋转 成为B的 右子树 的根节点
          ③B的原来 右子树 成为A的 左子树
    在这里插入图片描述

    RR:由于在结点A的 右孩子的右子树 插入结点导致失衡。

      左单旋:①将A的 右孩子B 向左上旋转 代替A成为根节点
          ②将A结点 左下旋转 成为B的 左子树 的根节点
          ③B的原来 左子树 成为A的 右子树
    在这里插入图片描述

    LR:由于在结点A的 左孩子的右子树 插入结点导致失衡。

    先左旋后右旋:先让A的左孩子B的右子树的根节点C左上旋提升到B位置,在让C右上旋提升到A位置。
    在这里插入图片描述

    RL:由于在结点A的 右孩子的左子树 插入结点导致失衡。

    先右旋后左旋:先让A的右孩子B的左子树的根节点C右上旋提升到B位置,在让C左上旋提升到A位置。
    在这里插入图片描述

    二,平衡二叉树删除步骤

    ①删除结点(方法同二叉排序树)
      1.如果删除的是叶子结点,直接删除。
      2.如果删除的结点只有一颗子树,则用子树顶替删除位置。
      3.如果删除的结点有两颗子树,则直接前驱(或直接后继)结点顶替,并转为对直接前驱(或直接后继)的删除。
    ②一路向北(上)找到最小不平衡子树,找不到就结束。
    ③找到最小不平衡子树下,“个头最大”的儿子和孙子。
    ④根据孙子位置,调整平衡(孙子相对于爷位置LL,RR,LR,RL)。
      1.如果孙子在LL,儿子右单旋。
      2.如果孙子在RR,儿子左单旋。
      3.如果孙子在LR,孙子先左旋后右旋。
      4.如果孙子在RL,孙子先右旋后左旋。
    ⑤如果不平衡向上传导,继续②。
    在这里插入图片描述

    三,平衡二叉树删除实例

    1.RR型

    在这里插入图片描述

    1.RL型

    在这里插入图片描述

    1.平衡向上传导

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    javaScript 中的localeCompare方法及其使用
    9.1充血模型和贫血模型
    (栈)剑指 Offer 09. 用两个栈实现队列(java)
    我没有机器学习的学位,却拿到了 DeepMind 研究工程师的 Offer
    论文阅读笔记 | 三维目标检测——MV3D算法
    提取多个txt数据并合成excel——例子:与中国建交的国家
    CentOS7 离线安装 Python
    Nginx学习笔记07——Nginx负载均衡
    广告行业中那些趣事系列54:从理论到实践学习当前超火的多模态学习模型
    关于架构的认知
  • 原文地址:https://blog.csdn.net/Cbelieveyouself/article/details/130897784