红黑树和普通二叉树的区别

如果说平衡二叉树是一个类的话,那么红黑树就是该类的一个实例。 
算法的书我丢久了,一下子也找不到,我是凭记忆说的。红黑树的算法比较麻烦,但它的思想很好,如果理解了它的思想也就理解它的算法,我也只记得思想,具体算法记不得了。我就在这说说思想吧。 

红黑树有两个重要性质: 
1、红节点的孩子节点不能是红节点; 
2、从根到前端节点的任意一条路径上的黑节点数目一样多。 
这两条性质确保该树的高度为logN,所以是平衡树。 

插入的节点总是设为红节点,当其复节点为红节点时,这就有破坏了性质1,就需要调整。将插入节点作为考察节点,考察其叔父,如果也是红节点,则将其父亲和叔父改为黑节点,而将其祖父改为红节点,然后以其祖父为考察节点。如果其叔父是黑节点则做一旋转变换可以搞定,没有图不太好说明,你可以自己考虑一下,总之它的思想是把“多出来”的红色往上一层推去,确保下面层红黑性质,最后推到根以后,如果依然违反性质1,则可以直接把根由红改黑即可,就相当于把这“多出来”的红色推到树以外的节点去了。 
删除节点时先要找到顶替的节点,如果删去的节点是黑色则破坏了性质2,也需要调整。调整的思想也同前面类似,把这个黑色赋予顶替节点,则顶替节点相当于有两重黑色,然后将它的两重黑色向上推,一直推到根,再从根推到外面去了。 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值