AVL树的插入与删除

AVL树是一种高度平衡的二叉搜索树,插入和删除操作后需通过旋转保持平衡。本文详细介绍了AVL树的插入新结点(包括插入后的旋转平衡)和删除结点(删除后的树高调整)的过程,以及操作的时间复杂度分析。
摘要由CSDN通过智能技术生成

AVL树是一种高度平衡的二叉搜索树,其每一个结点的左树高和右树高相差不大于1。这个性质使得AVL树的搜索效率要比普通的二叉搜索树要高,因为对于一组递增的数组,其构成的二叉搜索树会是一个链表,搜索时间复杂度自然就是O(n),而其构成的AVL树则肯定是一个搜索效率为O(lg(n))的二叉树。也正因为此,为了保持其平衡的性质,AVL树的插入和删除要比普通二叉搜索树要复杂。

二叉搜索树可以参考二叉搜索树的插入与删除

1. 通过旋转保持AVL树的平衡

旋转分为左旋和右旋两种,这两种操作是对称的,如下图所示。

在插入或者删除结点后,AVL树保持平衡的方法是旋转。对于下图中一颗左子树要比右子树高大1的树来说,如果在其左子树中插入一个结点,则会引起该树不平衡。此时,可通过一次或两次旋转使树平衡。


当结点被插入到b结点的左子树下,只需要对树a进行一次右旋即可,如下图所示,旋转后的树a左子树和右子树高会达到平衡。

当结点被插入到b结点的右子树下,则需要先对树b进行一次左旋转变成上一种情况,再对树a进行一次右旋,如下图所示。

对树b进行左旋后,树b的左子树比右子树高1,即转变为上一种情况(将结点插入到树b的左子树中),然后再对树a进行一次右旋即可将树调整回平衡状态。为什么要对树b进行一次左旋呢?假设我们部队树b左旋,直接对树a右旋,得到的树会是如下图所示。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值