数据结构之查找(六)——平衡二叉树

定义

  • 平衡二叉树(balanced binary tree),又称AVL树(Adelson-Velskii and Landis),其定义如下:
    一棵平衡二叉树或者是空树,或者是具有下列性质的二叉排序树

    • 左子树与右子树的高度之差的绝对值小于等于1;
    • 左子树和右子树也是平衡二叉排序树
  • 平衡因子: 给每个结点附加一个数字,给出该结点左子树和右子树的高度差。

    平衡因子=结点左子树的高度-结点右子树的高度
    根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能是-1、0或1。

  • 例子:
    在这里插入图片描述
    左边的是平衡二叉树,右边不是,因为平衡因子计算出来的结果如下图所示,
    在这里插入图片描述

  • 结论: 对于一棵有n个结点的AVL树,其高度保持在 O ( log ⁡ 2 n ) O(\log _2^n) O(log2n)数量级,ASL也保持在 O ( log ⁡ 2 n ) O(\log _2^n) O(log2n)量级。



平衡调整方法

  • 问题描述:当我们在一个平衡二叉排序树上插入一个结点时,有可能导致失衡,即出现平衡因子绝对值大于1的结点,如下图,
    在这里插入图片描述
    如果在一棵AVL树中插入一个新结点后造成失衡,则必须重新调整树的结构,使之恢复平衡。

  • 平衡调整的四种类型:

    • 几个相关概念说明:
      在这里插入图片描述
      A:失衡结点(不止一个失衡结点时,为最小失衡子树的根结点)
      B:A结点的孩子,C结点的双亲
      C:插入新结点的子树
      上图中当插入9之后,造成了结点7和结点16两个结点失衡,那么,根据定义,结点9相当于结点C,结点16相当于结点A,结点11相当于结点B。

    • 几种类型的说明:
      根据结点B和结点C在左右子树的情况,把失衡的二叉排序树分为四种类型,即LL型、LR型、RL型和RR型
      在这里插入图片描述
      以上四种类型的调整方法如下图,
      在这里插入图片描述

    • 调整原则

      • 降低高度
      • 保持二叉排序树的性质(把A,B,C三个结点根据二叉排序树的性质排成递增序列,将中间的结点作为子树的根结点)


平衡调整方法具体实现

  • LL型调整过程

    • 问题描述: 下图中,左边的为原平衡树,右边的是插入结点后的失衡LL型二叉树,
      在这里插入图片描述
    • 调整过程:
      • B结点带左子树 α \alpha α一起上升。
        在这里插入图片描述
      • A结点成为B的右孩子。
        在这里插入图片描述
      • 原来B结点的右子树 β \beta β作为A的左子树。
        在这里插入图片描述
    • 例子:
      在这里插入图片描述
  • RR型调整过程

    • 问题描述: 下图中,左边的为原平衡树,右边的是插入结点后的失衡RR型二叉树,
      在这里插入图片描述
    • 调整过程:
      • B结点带右子树 β \beta β一起上升。
        在这里插入图片描述
      • A结点成为B的左孩子。
        在这里插入图片描述
      • 原来B结点的左子树 α \alpha α作为A的右子树。
        在这里插入图片描述
    • 例子:
      在这里插入图片描述
      在这里插入图片描述
  • LR型调整过程

    • 问题描述: 下图中,左边的为原平衡树,右边的是插入结点后的失衡LR型二叉树,
      在这里插入图片描述
    • 调整过程:
      • C结点穿过A、B结点上升。
        在这里插入图片描述
      • B结点成为C的左孩子,A结点成为C的右孩子。
        在这里插入图片描述
      • 原来C结点的左子树 β \beta β作为B的右子树;原来C结点的右子树 γ \gamma γ作为A的左子树。
        在这里插入图片描述
    • 例子:
      在这里插入图片描述
  • RL型调整过程

    • 问题描述: 下图中,左边的为原平衡树,右边的是插入结点后的失衡RL型二叉树,
      在这里插入图片描述
    • 例子:
      在这里插入图片描述
      在这里插入图片描述


例子描述

  • 问题描述: 输入关键字序列(16,3,7,11,9,26,18,14,15),给出构造一棵AVL树的步骤。
  • 具体步骤
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值