关于树(平衡树)的旋转--理解方便记忆


对于平衡树为了保持它的特性,我们经常会做旋转操作(左旋,右旋,左右双旋,右左双旋)。这个本来是一个很基础的东西,一直也没放在心上,但经常一说起来却忘了具体是怎么操作的,于是写下一点理解帮助记忆。(欢迎讨论,尤其是理解有误的欢迎指正。)


自下向上地,在节点平衡因子(假设为 A 吧) |A| >= 2 (一般就等于2了)时就需要旋转,把这节点及以下看成独立的树也就可以将这节点看作根节点。A>0时向右找,A<0时向左找,遇到的下一个节点A‘(很明显|A‘|<=1)

  1. 与A同号时则需要单旋,就选它做根节点。原根节点X将作为一个子树,然后将原来A'这边的子树(树1吧)接到X上,将另一边子树(树2吧)留着继续作为A’的子树。因为它是处在高度(假设为H)高的那一边(比另一边至少高2,也就是另一边最多为H-2),向上移动使得这一段高度减一为H-1,另一边加1从而最多为H-1,又|A'|=1,所以另一边至少也为H-1,即就为H-1,,则移动后平衡因子变为0;
  2. 与A异号时则需要双旋,继续根据符号左右走,遇到的第一个平衡因子为0的节点作为根节点。原根节点X将作为一个子树,然后将原来A'这边的子树(树1吧)接到X上,将另一边子树(树2吧)接到父节点上代替原来A'的位置。
  3. 等于0的话需要双旋(类似2),当然就是它本身作为根节点了。原根节点X将作为一个子树,然后将原来A'这边的子树(树1吧)接到X上,将另一边子树(树2吧)留着继续作为A’的子树。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值