二叉树:平衡二叉树

平衡二叉树

定义

平衡二叉树 (balaanced binary tree) 又称AVL树

一棵二叉排序树或者是空树,或者是具有下列性质的二叉排序树:

  1. 左子树与右子树的高度之差的绝对值小于等于1
  2. 左子树和右子树也是平衡二叉排序树

该结点左子树和右子树的高度差:平衡因子 (BF)

根据定义,平衡二叉树上所有节点的平衡因子只能是 0,1,-1

在这里插入图片描述

对于一棵有n个结点的AVL树,其高度保持在O(log2n) 数量级,ASL也保持在O(log2n)量级

平均查找长度 ASL

查找成功的平均查找长度为:∑(本层高度*本层元素个数) / 节点总数

查找不成功的平均查找长度:∑(本层高度*本层补上的叶子个数) / 补上的叶子总数

平衡调整方法

当在一个平衡二叉排序树上插入一个结点时,又肯导致失衡,则必须重新调整树的结构,使之恢复平衡。

调整原则:

  1. 降低高度
  2. 保持二叉排序树的性质

在这里插入图片描述

调整过程中可根据二叉排序树的性质进行判断,比较A B C结点的大小

LL型

在这里插入图片描述

调整后的结果:

在这里插入图片描述

  • B结点带左子树上升
  • A结点成为B结点的左孩子
  • 原来B结点的右子树作为A的左子树
RR型

在这里插入图片描述

调整后的结果:

在这里插入图片描述

  • B结点带右子树上升
  • A结点成为B的左孩子
  • 原来B结点的左子树作为A的右子树
LR型

在这里插入图片描述

调整后的结果:

在这里插入图片描述

  • C结点穿过A、B结点上升(B<C<A)
  • B结点成为C的左孩子,A结点成为C的右孩子
  • 原C结点的左子树作为B的右子树,原C结点的右子树作为A的左子树
RL型

在这里插入图片描述

例:

在这里插入图片描述

  • C结点穿过A、B结点上升(A<C<B)
  • A结点成为C的左孩子,B结点成为C的右孩子
  • 原C结点的左子树作为A的右子树,原C结点的右子树作为B的左子树
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值