AVL平衡二叉树旋转详解

AVL(平衡二叉树)

AVL定义

  • 左子树和右子树的高度之差的绝对值不超过1,高度之差也叫做平衡因子(Balance Factor),简称BF
  • 左右子树也都是平衡二叉树

image-20200930151109715

当一个节点没有左子树时,左子树高度为-1
当一个节点的左子树时叶子节点时,左子树的高度为0
当一个节点的左子树的左子树是叶子节点时,左子树的高度为1
# 如图所示:
# 例1:
以2为根节点,左子树的高度为0,右子树的高度为1,0 - 1 = 1,满足平衡二叉树条件 -1 <= BF <= 1
# 例2:
以1为根节点,左右子树的高度都为-1,-1 - -1 = 0,满足平衡二叉树条件 -1 <= BF <= 1,叶子节点也是平衡二叉树
# 例3:
以3为根节点,左子树高度为-1,右子树高度为0,-1 - 0 = -1,满足平衡二叉树条件 -1 <= BF <= 1

AVL插入

  • 二叉平衡树在插入或删除一个结点时,先检查该操作是否导致了树的不平衡,若是,则在该路径上查找最小的不平衡树,调节其平衡。

  • 4种平衡调整如下:

LL(左左右单旋转)

image-20200930155235954

# LL(左左)右单旋转,举例:
1、插入20后,导致50为根节点的树失衡(左子树高度为2,右子树高度为0,已40为根节点的树并没有失衡)
2、20节点在50的左子树上,最终也是在30的左子树上,在左左子树的左边节点,满足左左,进行右单旋转
3、右单旋转可以把树看做是一根链条,以50为支点,向右边拉动一格
4、旋转完成后,恢复平衡
RR左单旋转

image-20200930161702805

# RR(右右)左单旋转,举例:
1、插入65后,导致40为根节点的树失衡(左子树高度为0,右子树高度为2,已50为根节点的树并没有失衡)
2、65节点在40的右子树上,最终也是在60的右子树上,在右子树的右边节点,满足右右,进行左单旋转
3、左单旋转可以把树看做是一根链条,以40为支点,向左边拉动一格
4、旋转完成后,恢复平衡
LR左右情况

image-20200930170538227

# 无法通过一次旋转恢复平衡,先将左子树向左旋转一次,转换成LL型,再向右旋转
# 第一列:
1、插入42后,导致50为根节点的树失衡(左子树高度为2,右子树高度为0)
2、42插入在左子树的右子树上,将左子树向左旋转一次
3、此时满足了LL,向右旋转一次
4、恢复平衡
RL右左情况

image-20200930173540532

# 无法通过一次旋转恢复平衡,先将右子树向右旋转一次,转换成RR型,再向左旋转
# 第一列:
1、插入43后,导致40为根节点的树失衡(左子树高度为0,右子树高度为2)
2、43插入在右子树的左子树上,将右子树向右旋转一次
3、此时满足了RR,向左旋转一次
4、恢复平衡
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值