平衡二叉树

更新、更全的《数据结构与算法》的更新网站,更有python、go、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.html

一、什么是平衡二叉树

例:搜索树结点不同插入次序,将导致不同的深度和平均查找长度ASL

watermark

上图为按照自然月份序列构建的搜索树,它的ASL为\((1+2*2+3*3+4*3+5*2+6*1)/12=3.5\)

watermark

上图为按照平衡二叉树构建的搜索树,它的ASL为\(3.0\)

watermark

上图为按照月份字符串大小顺序构建的搜索树,他的ASL为\(6.5\)

“平衡因子”(Balance Factor,简称BF): \(BF(T) = h_L - h_R\),其中\(h_L\)\(h_R\)分别为T的左、右子树的高度。

平衡二叉树(Balanced Binary Tree)(AVL树):空树,或者任一结点左、右子树高度差的绝对值不超过1,即\(BF(T)|\leq{1}\)

watermark

二、平衡二叉树的高度能达到\(log_2n\)吗?

如下图所示为完全二叉树的高度计算:

watermark

\(n_h\)为高度为h的平衡二叉树的最少结点数。结点数最少时,我们可以得知左(右)子树最多比右(左)子树多一个结点:

watermark

上述公式类似于斐波那契序列: \(F_0=1,F_1=1,F_i=F_{i-1}+F_{i-2}\quad{f}or\quad{i}>1\),即我们可以通过斐波那契的规律,来探讨平衡二叉树的高度计算。

\(n_h\)是高度为h的平衡二叉树的最小结点数,有如下推导:

watermark

按照上图的推导,我们可以得出:给定结点数为n的AVL树的最大高度为\(O(log_2n)\)

三、平衡二叉树的调整

3.1 右单旋

watermark

不平衡的“发现者”是Mar,“麻烦结点”Nov在发现者子树的右边,因而叫做RR插入,需要RR旋转(右单旋)

watermark

3.2 左单旋

watermark

“发现者”是Mar,“麻烦结点”Apr在发现者子树的左边,因而叫LL插入,需要LL旋转(左单旋)

watermark

3.3 左-右双旋

watermark

“发现者”是May,“麻烦结点”Jan在子树的右边,因而叫LR插入,需要LR旋转

watermark

3.4 右-左双旋

watermark

“发现者”是Aug,“麻烦结点”是Feb在子树的左边,因而叫RL插入,需要LR旋转

watermark

3.5 完善平衡二叉树

接下来我们使用上述所说的四种方法,完善我们的平衡二叉树。

0402-01.gif

调整后的结果为:

watermark

转载于:https://www.cnblogs.com/nickchen121/p/11551579.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值