数据结构------二叉平衡树(二)删除操作

二叉平衡树的删除与插入类似,先采用二叉搜索树的删除方法,删除结点,再在必要时通过重新平衡,恢复平衡性和排序性。当删除X有两个孩子时,使用替代法,将问题转化为删除只有一个孩子的结点的问题,然后删除之。由q指向实际被删除的结点,它最多只有一个非空子树,当结点q由它的孩子取代后,该树变矮,这种情况会影响其祖先的平衡性,应重新平衡。使用short变量来记录对其双亲(p)平衡性的影响。

同插入的情况一样,我们通过以下三种情况来分析二叉平衡树的删除。

情况一:结点p的平衡因子为0

从p的子树上删除结点后,该子树变矮,但以p为根的子树的高度不变,只是平衡因子变化了。只要修改平衡因子即可。令short变量为0,表示算法终止。如图所示:


情况二:从结点p的较高子树上删除一个结点

从p的较高子树上删除节点后,树的高度降低,但是一p为根的子树依然是平衡的。因此将p的平衡因子置位1。因为p的平衡因子改变了可能影响其双亲的平衡因子,故需要是short为1,表示继续检查p的双亲为根的子树的平衡性是否因为p的变矮而破坏。如图所示:


情况三:从结点p的矮的子树上删除一个结点

从p的较矮子树上删除一个结点,以p为根的子树的平衡性被破坏,要通过旋转来恢复这棵子树的平衡性。设r是p的较高子树,根据r的平衡因子,可以进一步细分一下三种。

(1)结点r的平衡因子为0

则应采用单一旋转,并修改p和r的平衡因子的值。重新平衡后,新子树与原子树有相同的高度,不会影响二叉平衡树的其余部分,令short=0,算法终止。如图所示:


(2)结点r的平衡因子和p的平衡因子同号

仍采用单一旋转,旋转后p和r的平衡因子均为0.重新平衡后,新子树变矮,故short=1,需要继续考察p的双亲的平衡性。


(3)结点r的平衡性和p的平衡性异号

则采用双重旋转。令u是r的较高子树的根,它将成为新子树的根,取代p为根的子树,u的平衡因子为0,p和r的平衡因子做相应的修改,这棵以u为根的子树是平衡的,但高度变矮了。故short=1;继续向根方向考察。如图所示:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值