AVL树(平衡二叉树)

平衡二叉树:

搜索二叉树的优化版,保证了树的平衡,即每个的结点的左子树高度与右子树高度差的绝对值不会超过1(0或1)。

为了保证二叉树的平衡,给每个结点引入平衡因子,父节点。

平衡因子:右子树高度减去左子树高度(可以反过来)。

为了保证二叉树的平衡,我们通过旋转的方式。

二叉树需要旋转的类型总过分为4大类,旋转的方式也分为4类

第一类  左单旋

抽象图:对于这种类型的所有都可以进行左单旋

关键在于parent, subR,subRL,

parent:不平衡结点

subR的右子树插入结点导致subR的右子树偏高,而parent本来就因为subR导致右子树偏高,又在subR的右子树插入结点后,导致parent失衡。

调整方法:

第二类: 右单旋

抽象图:

与左单旋类似

解决办法:

第三类: 右左旋(需先右旋再左旋)

抽象图:

右左旋可以拆分为一个右旋,一个左旋,思想是先通过右旋把子树变为一个完完全全的需要左旋模型。

subR通过左旋,变成第三个图,从而达到需要左旋模型,然后再通过左旋parent,从而实现平衡。

需要注意的是h可以等于0

也就是说如上图的那样60底下可以没有结点。

第四类:  左右旋(需先左旋再又旋转)

抽象图:

解决方法:思想与第三类相似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值