栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

假设,左子树高度为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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号