平衡二叉搜索树 - AVL树

1 定义

二叉搜索树中各节点的平衡因子不大于1,则该树为AVL树

1.1 平衡因子

任一节点v的平衡因子定义为其左、右子树的高度差,即平衡因子=左子树高度 - 右子树高度

1.2 平衡性

可以证明在渐进意义而言,AVL树的高度为O(logn),因此AVL树符合适当平衡。

2 失衡与重平衡

2.1 失衡

AVL树中的查找、插入和删除所采取的策略与普通二叉搜索树一致,但经过动态操作后节点高度可能发生变化,以致于AVL树不再满足条件而失衡。在这里插入图片描述

2.2 插入重平衡

插入失衡可分为两类:子孙同侧、子孙异侧。这两种插入重平衡的策略都可以归结为中间值为父,即将数值处于三者中间值的为父节点,其余两个节点作子节点。经过重平衡操作后,该局部根的高度不变,因此不会影响至祖先及其他节点的平衡性。
在这里插入图片描述
在这里插入图片描述

2.3 删除重平衡

删除失衡的拓扑结构也可分为两类:子孙同侧、子孙异侧。删除重平衡策略与插入相同,亦为中间值为父。由下图可知,在删除重平衡后,可能会使局部根高度的变化,导致祖先失衡,该失衡可能会一直延伸到根节点,此时需要不断向上重复执行重平衡操作,直至全树平衡。
在这里插入图片描述
在这里插入图片描述

3 效率

3.1 查找效率

AVL的查找算法与二叉搜索树的常规算法一致,消耗时间不超过O(logn)

3.2 插入效率

AVL的插入算法首先是按照二叉搜索树的常规算法,在O(logn)时间内插入新节点,至多再旋转两次完成重平衡,所以插入操作依然可以在O(logn)时间内完成

3.3 删除效率

AVL的删除操作较插入操作,可能需要多次重平衡,但需要重平衡的节点都是删除节点的祖先,故重平衡次数不超过O(logn),重平衡操作需要O(1)时间,所以删除操作总体的时间复杂度依然是O(logn)

该文插图均来自邓俊辉老师的《数据结构与算法》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值