总算把红黑树看完啦

最近三天都在看红黑树,进度实在太慢。看的时候感觉书中采用的修正算法都太过抽象,也有可能是自己这方面的思维有所欠缺吧。作者的方法非常的巧妙,是很具备数学方法的。通过对情况进行抽象,原本红黑树要求的5个条件,由于元素的插入和删除是迭代进行的,把需要修正的条件减少到两个。即插入时需要保证新插入的元素z和z.parent不同是为红,当处理这种情况时,通过对临近元素颜色的改变和树的旋转来满足条件,或者将冲突的z和z.parent上移来迭代解决。

在处理删除元素的时候,对删除的元素z有双子树时,可以用z的successor y来代替,这样一来,当z的单子树的情况也就和处理删除y,且y最多有单子树的情况统一起来。所需要解决的就是有单子树,或者没有子树的情况了。同时由于红黑树的性质,只有单子树时,旁枝元素就可以用枚举法列出所有情况然后解决了。但是红黑树算法提出了一个非常好的想法,它没用用到y具有单子树的特殊性,却给出了一个更为普适的方法。当删除了元素y时,如果y时红树则没有影响,如果y时黑树,这样就破坏了包含y的子枝的黑高。倘若把y的黑高并入到y的子树x中,x可以为T.nil。这样x记为两个黑枝,黑高为2;或红黑枝,黑高为1。我们通过对删去y后的临枝的旋转和变色,即可解决x的双重黑高的问题,可以将x的黑转移到别的节点的红枝上;或者将x的一个黑计数上移,通过迭代解决。当如果上移迭代遇到的时红节点,就搞好完成,因为没有改变子枝的黑高,而且没有其他违反条件的地方,如果遇到黑节点,则继续变换解决或迭代,直到root节点。在root节点就不用考虑双重黑节点了,即减去1个黑计数,所有的枝叶黑高都减1,对结构没影响。

本文只是作为我的学习记录,写的太没头绪,不值得看。我学习算法用的是机械工业的算法导论,如果大家想了解红黑树可以查看。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值