数据结构浅析——AVL Tree

本文探讨了AVL Tree的插入原理,强调其作为高度平衡二叉搜索树保持搜索效率O(log n)的重要性。插入时涉及平衡因子检查与旋转操作,包括左旋和右旋,以维持树的平衡。平衡因子确保节点左右子树高度差小于2,旋转则是保持平衡的关键。此外,介绍了旋转后平衡因子的变化规则,但删除节点同样复杂。
摘要由CSDN通过智能技术生成

  •  数据结构浅析——AVL Tree

 今天我对AVL Tree的插入方式进行了研究,废话不多说直接进入正题。

 AVL Tree是高度平衡的二叉搜索树,保留了搜索树中序遍历有序的特点,同时在每一个节点中加入了一个平衡因子,保证了树的高度平衡,搜索时的复杂度为O(log n)。

 在插入时,每次插入都要更新相关的平衡因子并且检查相关节点的平衡因子是否异常(大于1或者小于-1),当平衡因子异常时就进行旋转操作来使得平衡恢复。

一、平衡因子

 平衡因子是当前节点的右左子树的高度差,它的存在保证了每一个节点的左右子树的高度差值小于二,即这棵树最长分支和最短分支的差值小于2。

二、旋转

 旋转就是平衡搜索树能够平衡的根本所在,旋转的方式保证了子树高度改变的同时,其中储存的数据依旧有序。

旋转主要有两种方式:左旋和右旋。

右旋:


左旋:


AVL Tree左右旋转方式高度对称,大家看见我甚至把图片反转一下就可以继续使用了,所以在就此书写代码时也十分方便,写完左旋照着左旋写右旋就好了。

那么光是左右旋转一下是不是这棵树就可以了呢?不是的,根据情况的不同有的树要进行两次旋转才能从新平衡起来,而有的树则需要反复旋转三次。

 以下我均以左侧举例,右侧出现类似情况解决方式和左侧相同只是翻转过来而已。所以左侧较长时旋转有三种情况

三、平衡因子在旋转后的改变。

 在左旋时,旋转中心节点的平衡因子值只会出现0或1或-1, 而父亲节点的值为2或1。

 当父节点平衡因子等于2,子节点无论为何值时,或者父节点平衡因子等于一,而子节点等于0时,有如下公式:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值