二叉树系列(三)------AVL树(平衡二叉树)

一 定义平衡二叉树,又称AVL树,它是一种特殊的二叉排序树。AVL树或者是一棵空树,或者是具有以下性质的二叉树:深度是 O(logN)左右子树的高度差的绝对值不能大于1左右子树都是平衡二叉树如下图所示:二 不平衡出现的情况如上图中所示,按照二叉树方式插入,总会造成不平衡,如果从A 几点出现不平衡,有四种情况:1 对 A 的左儿子的左子树进行一次插入,记为 LL;2 对...
摘要由CSDN通过智能技术生成

一 定义

平衡二叉树,又称AVL树,它是一种特殊的二叉排序树。AVL树或者是一棵空树,或者是具有以下性质的二叉树:

  • 深度是 O(logN)
  • 左右子树的高度差的绝对值不能大于1
  • 左右子树都是平衡二叉树
    如下图所示:

在这里插入图片描述

二 不平衡出现的情况

如上图中所示,按照二叉树方式插入,总会造成不平衡,如果从A 几点出现不平衡,有四种情况:

  • 1 对 A 的左儿子的左子树进行一次插入,记为 LL;
  • 2 对 A 的左儿子的右子树进行一次插入,记为LR;
  • 3 对 A 的右儿子的左子树进行一次插入,记为RL;
  • 3 对 A 的右儿子的右子树进行一次插入,记为RR;

其中 1和4 是关于 A 点的镜像操作,2和3是关于A点的镜像操作,因此,理论上只两种情况,针对LL和RR的类型,通过一次对树的 单旋转 来处理,针对 LR和RL的类型,通过对树的一次 双旋转 来处理。

三 旋转

1 LL型

在这里插入图片描述
如上图所示,节点8的由于 6 的插入到了 其左孩子的 左子树 导致不平衡,属于 LL类型,用单旋转处理。

  • LL 顺时针旋转,最低不平衡节点 8 高度降 1,左子树7 的 高度 加 1
  • 同时节点 8 变为 7的右孩子

另一种情况,上面所说的是最简单的情况,节点8 没有右孩子,看下面的旋转
在这里插入图片描述
上面的从节点5是最小不平衡点,按照 LL单旋转,要先将 5 的左孩子3 的右孩子4 变为 5的左孩子,然后再执行上边的旋转;

  • 总结就是:
    • 找到最小的不平衡节点 A
    • 将 A的左孩子的右子树,变为 A的左孩子,
    • 然后,将A变为其左子树的右孩子
    • 最后调整 节点的高度

代码实现如下

  // LL 单旋转,顺时针的,根节点的左子树向上,根节点向下,1. 左子树的右子树,变为根节点左子树,2. 同时,根节
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值