二叉树之AVL树及其Java实现

本文详细介绍了AVL树的平衡定义,不平衡场景,包括单旋转和双旋转的平衡操作,并给出了Java实现的具体步骤,涉及节点插入、查找、高度计算以及平衡旋转等关键方法。
摘要由CSDN通过智能技术生成

AVL树平衡的定义

              

下图中,之所以右图的二叉树不是AVL树,是因为在节点7处,其左子树高度为2,右子树高度却为0,所以不平衡。

                                                    

AVL树不平衡场景

总共不平衡由以下几种情景造成:

  1. 边界情景一:研究节点的左儿子的左子树破坏了平衡——>左子树单旋转
  2. 边界情景二:研究节点的右儿子的右子树破坏了平衡——>右子树单旋转
  3. 内部情景一:研究节点的左儿子的右子树破坏了平衡——>LR双旋转
  4. 内部情景二:研究节点的右儿子的左子树破坏了平衡——>RL双旋转

其实就是数据插在何处,导致了左右子树的高度超过1的意思。

单旋转

如下图,当插入6时,造成8节点不平衡,左子树高度比右子树高度多2。为恢复平衡,以8节点的左儿子7为轴进行旋转得到右图,平衡完成。(最右边图作为总结,k2即为研究节点,虚线表示层,k2的左儿子k1的左子树X比k2的右儿子Z深2层)

                

双旋转

如下图,没插入15之前,7节点左子树为空,右子树就1层,满足平衡。插入15后,7节点左子树依然为空,右子树变成两层,平衡被打破。这种打破平衡对应内部情景二,采用RL双旋转进行平衡。具体来说&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值