AVL树

什么是AVL树

在计算机科学中,AVL树是最先发明的自平衡二叉查找树。
在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。

AVL树的应用

AVL树是一种比二叉查找树还特别的树。这种树就可以帮助我们解决二叉查找树刚才的那种所有节点都倾向一边的缺点的。具有如下特性:

  • 具有二叉查找树的全部特性(首先本身是一棵二叉查找树)
  • 带有平衡条件:每个节点的左子树和右子树的高度差至多等于1。
  • 也就是说,AVL树,本质上是带了平衡功能的二叉查找树

在这里插入图片描述

AVL树的操作

  • 查找
  • 插入
  • 旋转
  • 删除

AVL树大部分操作都和BST树相同, 只有在插入删除结点时, 有可能造成AVL树失去平衡, 而且只有那些在被插入/删除结点到根节点的路径上的结点有可能出现失衡, 因为只有那些结点的子树结构发生了变化。

当插入新结点导致不平衡时, 我们需要找到距离新节点最近的不平衡结点为轴来转动AVL树来达到平衡

AVL树的旋转操作

右旋(左-左型)

在这里插入图片描述
把这种倾向于左边的情况称之为左-左型。这个时候,我们就可以对节点9进行右旋操作,使它恢复平衡。
在这里插入图片描述
顺时针旋转两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。

右旋转动态演示
在这里插入图片描述
在这里插入图片描述
节点4和9高度分别如图所示,高度相差大于1。由于是左孩子的高度较高,此时是左-左型,进行右旋。

在这里插入图片描述

左旋(右-右型)

当大部分节点都偏向右边的时候,通过左旋来还原
在这里插入图片描述

左旋转动态演示
在这里插入图片描述

右-左型(先右旋再左旋)

在这里插入图片描述
对于这种 右-左型的情况,处理的方法是先对节点10进行右旋把它变成 右-右型
在这里插入图片描述
再进行左旋。
在这里插入图片描述

左-右型(先左旋再右旋)
在这里插入图片描述
对于左-右型的情况和刚才的 右-左型相反,我们需要对它先进行一次左旋,再进行右旋
在这里插入图片描述

AVL树旋转操作总结

  1. 左-左型:做右旋转。

  2. 右-右型:做左旋转。

  3. 左-右型:先做左旋,后做右旋。

  4. 右-左型:先做右旋,再做左旋。

实例

初始状态如图所示,插入如下数值:1,4,5,6,7,10,9,8
在这里插入图片描述
插入1

在这里插入图片描述
左-左型,进行右旋调整
在这里插入图片描述
插入4
在这里插入图片描述
继续插入 5
在这里插入图片描述
破坏了平衡条件(每个节点的左子树和右子树的高度差至多等于1)
右-右型,需要左旋转调整。

在这里插入图片描述
插入6
在这里插入图片描述
右-右型,需要进行左旋
在这里插入图片描述
继续插入7
在这里插入图片描述
右-右型,需要进行左旋
在这里插入图片描述
继续插入10
在这里插入图片描述
继续插入9
在这里插入图片描述
右-左型:先右旋把它变成右-右型,再进行左旋

在这里插入图片描述

参考网址:
https://www.sohu.com/a/270452030_478315

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值