平衡二叉树(AVL)插入时的旋转操作(无代码)


前言

首先感谢下列文章为作者提供思路,其次本文为作者未来查阅所写。
平衡二叉树(AVL)图解与实现.
平衡二叉树的旋转.
平衡二叉树的LR旋转的两种情况.
本次作图使用下列网站资源:
数据结构可视化.


一、平衡二叉树的定义

平衡树(Balance Tree,BT) 指的是,任意节点的,子树的高度差都小于等于1。且其中序遍历序列为有序递增序列(本文均按照左小右大定义)。

二、引入两个概念

1.最小不平衡子树根节点(简称:最小失衡点)

图2-1-1

如图2-1-1所示:此时若观察以20为根节点的AVL,其平衡,但以36为根节点的子树不平衡(以36为根节点的子树左子树高为0,右子树高为2,左右子树高差的绝对值大于1,故不平衡)。
图2-1-2
如图2-1-2所示:此时若观察以20为根节点的二叉树,不平衡,以36为根节点的子树也不平衡。
在这两种情况中,我们均选择最小的那棵不平衡的子树,即(36-45-77)
其根节点(36)作为最小不平衡子树的根节点,简称为最小失衡点。
注意:在一组旋转中最小平衡点是不变的

2.旋转中心节点(简称:旋转中心)

当最小失衡点选出后,一般情况下由该最小失衡点的左右某一个孩子作为其旋转中心(若最小失衡点的左子树高于右子树,则为最小失衡点的左孩子)。
注意:在LR、RL情况下旋转中心是会发生改变的
如图2-1-1和图2-1-2,旋转中心均为(45)。

三、旋转的几种情况

下列中最小平衡点用红色箭头标识,旋转中心用橙色箭头标识

1、单旋转(LL、RR)

LL旋转

图3-1-1
如图3-1-1,由上述定义得,最小失衡点为20,则旋转中心为15,由根节点出发(1-2)判断其为LL型,则以旋转中心向左(L)旋转,如下图(3-1-2):
图3-1-2
引用平衡二叉树的旋转中的动图:
点击查看动图

RR旋转

图3-1-4
如图3-1-3,由上述定义得,最小失衡点为15,则旋转中心为20,由根节点出发(1-2)判断其为RR型,则以旋转中心向右(R)旋转,如下图(3-1-4):
图3-1-5
引用平衡二叉树的旋转中的动图:
点击查看动图

2、双旋转(LR、RL)

双旋转的实质就是第一次现将子树旋转为单旋转的情况,然后实行一次单旋转即可。

LR旋转

图3-2-1
如上图3-2-1所示,最小失衡点为20,旋转中心为10,首先带动与旋转中心连接的点(除最小失衡点外)转动,将树转动为图3-1-1的情况,然后进行一次LL单旋转即可(此次转动需带动最小失衡点):
图3-1-1

注意,此时旋转中心从10变成了15,但最小失衡点未改变

图3-1-2
旋转完成。

RL旋转

图3-2-2
如上图3-2-2所示,最小失衡点为15,旋转中心为30,首先带动与旋转中心连接的点(除最小失衡点外)转动,将树转动为图3-1-3的情况,然后进行一次RR单旋转即可(此次转动需带动最小失衡点):
图3-1-3

注意,此时旋转中心从30变成了20,但最小失衡点未改变

图3-1-4
旋转完成。

3、多结点情况

若出现下图中的情况:
图例1
此时由前面的概念可以得出,最小失衡点为20,旋转中心为45,此时可以暂时先将图化简为下列情况:
图例2
得出:
图例3

然后,我们观察图例1,,,65是78的左子树,转动后78的左子树存在空位,则将65放置于该位置,15是20的左子树,转动后20的左子树存在空位,则将15放置于该位置,30是45的左子树,转动后45的左子树不存在空位,则将30放置于以45的左孩子为根的子树之中的适当位置即可:
图例4
完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值