如何证明平衡树可以通过左旋+右旋保持平衡?

注意事项:以下内容用到大量的代号,建议一边画图,一边推导

假设,左子树高度为LH,右子树高度为RH,左孩子的左子树高度为LLH,左孩子的右子树高度为LRH,右孩子的左子树高度为RLH,右孩子的右子树高度为RRH,旋转后左子树高度为NLH,旋转后右子树高度为NRH 

1. LL与RR

以LL情况为例,可知:

LH = RH + 2
LH = max(LLH, LRH) + 1 = LLH + 1
RH = LLH - 1
LRH + 1 <= LLH <= LRH + 2

以左孩子为轴,进行右旋后

NLH = LH - 1
NRH = max(LRH, RH) + 1

则新的平衡树的左右高度差为

|NLH - NRH| = |(LH - 1) - (max(LRH, RH) + 1)|
            = |LLH - (max(LRH, LLH - 1) + 1)|
			= |max(LLH - LRH - 1, LLH - LLH)|
			= |max(LLH - LRH - 1, 0)|

化简可得

0 <= |NLH - NRH| <= 1

满足平衡二叉树的定义,同理可证RR 

2. LR与RL

以LR情况为例,可知:

LH = RH + 2
LH = max(LLH, LRH) + 1 = LRH + 1
RH = LRH - 1
LLH + 1 <= LRH <= LLH + 2
|LRLH - LRRH| = 1
LRH = max(LRLH, LRRH) + 1

以左孩子的右孩子为轴,进行左旋后

NLLH = max(LLH, LRLH) + 1
NLRH = LRRH

则左孩子的左右高度差为

|NLLH - NLRH| = |max(LLH, LRLH) + 1 - LRRH|
              = |max(LLH - LRRH + 1, LRLH - LRRH + 1)|

若LRLH > LRRH,则:

LLH <= LRRH <= LLH + 1
LRLH = LRRH + 1
LRH = LRLH + 1

计算得

|NLLH - NLRH| = 2

再以左孩子为轴,进行一次右旋

|NLH - NRH| = |(max(LLH, LRLH) + 1) - (max(LRRH, RH) + 1)|
            = |max(LLH, LRLH) - max(LRRH, RH)|
			= |LRLH -  LRLH|
			= 0


满足平衡二叉树的定义,同理可证RL 

3. 参考文献

(1)An algorithm for the organization of information

(2)AVL树(三)之 Java的实现

(3)可视化AVL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值