红黑树-插入的维护
先附上参考资料
https://www.cnblogs.com/skywang12345/p/3245399.html
https://zhuanlan.zhihu.com/p/79980618
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
插入节点方法:
1、以平衡树的方式插入一个红色节点的数
2、通过旋转,达到红黑树的平衡
3、根节点设置为黑色
红黑树的旋转
1、父节点是红色,叔叔也是红色
解决方案:直接将父亲和叔叔都设置为黑色,然后把祖父设置成红色,以祖父为当前节点继续遍历

2、父亲是红色,叔叔是黑色
⑴你为右孩子,父亲是左孩子
解决方案:以父节点(P),做一次左旋,把父节当当前节点做一次遍历(将当前情况调整为第三种情况)

⑵你为左孩子,父亲是右孩子
解决方案:以父节点(P),做一次右旋,把父节当当前节点做一次遍历(将当前情况调整为第三种情况)

2、父亲是红色,叔叔是黑色
⑴你为左孩子,父亲是左孩子
解决方案:父节点(P)设置为黑色,祖父节点(g)设置为红色,以祖父节点做一次右旋,当前节点保持不变,继续做一次遍历
理解:这种情况很简单,想象这是一根绳子,手提起 P 节点,然后变色即可

⑵你为右孩子,父亲是右孩子
解决方案:父节点(P)设置为黑色,祖父节点(g)设置为红色,以祖父节点做一次左旋,当前节点保持不变,继续做一次遍历
理解:这种情况很简单,想象这是一根绳子,手提起 P 节点,然后变色即可


浙公网安备 33010602011771号