学习AVL树的2个难点

今天学习了AVL树的实现,有2个地方想了很久才想明白。
问题1.为什么在父节点的平衡因子调整为零时结束递归地向父节点调整平衡因子?
即 if node.parent.balaceFactor != 0:
self.updateBalance(node.parent)
问题2.如何推导公式
rotRoot.balaceFactor=rotRoot.balaceFactor+1-min(newRoot.balaceFactor,0)
在这里插入图片描述
问题1的分析:
如图,要形成节点左倾(右倾用类似方法分析),新节点A只可能在2类位置存在:
情况1.新节点在B的左子树或右子树上
情况2.新节点在D的左子树或右子树上
情况1中,决定E的高度的是E的左侧树枝的深度(即节点C的左子树的高度),向右旋转后C的左子树的高度减1。
此时,若新根C的平衡因子为0,则新根C的右子树的高度=节点C的左子树的高度=新增之前E的高度,所以E的祖先节点的平衡因子没有变化,不需要继续向上调节平衡因子。
情况2 在调整平衡因子前属于LR的不平衡,需要转换为LL的不平衡再旋转,旋转之后的形态同情况1。

问题2:图书馆找到了推导:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值