红黑树的修正

红黑树有什么特性?

(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

node 当前节点

returnpoint
若node的父节点存在,且父节点是红色
        |---- 若父节点是祖父节点的左孩子
        |       |---- 若叔叔节点是红色
        |       |       |---- 叔叔节点与父节点变为黑色,祖父节点变为红色
        |       |       |---- node赋值祖父节点,返回returnpoint
        |       |---- 若叔叔节点是黑色
        |               |---- 若node是父节点的右孩子
        |               |       |---- 将现在的父结点存为tmp,左旋父节点
        |               |       |---- 当前节点变为黑色,祖父节点变为红色
        |               |       |---- 右旋祖父节点
        |               |       |---- node赋值tmp,返回returnpoint,对旋转后的原父节点进行修复
        |               |---- 若node是父结点的左孩子
        |                       |---- 父节点变为黑色,祖父节点变为红色
        |                       |---- 右旋祖父节点
        |                       |---- 返回returnpoint
        |---- 若父节点是祖父节点的右孩子
                |---- 若叔叔节点是红色
                |       |---- 叔叔节点与父节点变为黑色,祖父节点变为红色
                |       |---- node赋值祖父节点,返回returnpoint
                |---- 若叔叔节点是黑色
                        |---- 若node是父节点的左孩子
                        |       |---- 将现在的父结点存为tmp,右旋父节点
                        |       |---- 当前节点变为黑色,祖父节点变为红色
                        |       |---- 左旋祖父节点
                        |       |---- node赋值tmp,返回returnpoint,对旋转后的原父节点进行修复
                        |---- 若node是父结点的右孩子
                                |---- 父节点变为黑色,祖父节点变为红色
                                |---- 右旋祖父节点
                                |---- 返回returnpoint

离开循环,说明当前节点为根节点,将当前节点变为黑色

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值