算法学习笔记:红黑树

Posted arseneyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习笔记:红黑树相关的知识,希望对你有一定的参考价值。

一、红黑树特性

1.节点只能为红色或者黑色。

2.根节点为黑色。

3.叶节点(NIL)为黑色。

4.红色节点的子节点必须时黑色节点。

5.任意节点到达该节点的子孙节点的路径包含相同数目的黑色节点。

 

二、红黑树基本操作

技术分享图片

 

三、插入节点

将红黑树作为一棵普通的搜索树进行插入,将插入节点涂为红色。之后有三种情况:

1.若当前节点为根节点,将插入节点涂为黑色。

2.若当前节点的父节点为黑色,不需要调整,仍然是红黑树。

3.若当前节点的父节点为红色,将红色节点移动到根节点后涂黑即可,依然有三种情况:

  Case 1:若当前节点的叔叔节点(父节点的兄弟节点)为红色

    ①将父节点涂为黑色

    ②将叔叔节点涂为黑色

    ③将祖父节点涂为红色

    ④将祖父节点设为当前节点继续进行操作

技术分享图片

 

  Case 2:若当前节点的叔叔节点为黑色,且当前节点为其父节点的右子节点

    ①将父节点设为当前节点

    ②以当前节点为轴进行左旋

技术分享图片

 

  Case 3:若当前节点的叔叔节点为黑色,且当前节点为其父节点的左子节点

    ①将父节点涂为黑色

    ②将祖父节点涂为红色

    ③以祖父节点为轴进行右旋

技术分享图片

 

四、删除操作

将红黑树作为一棵普通的搜索树进行删除。

  1.若删除节点没有子节点,则直接将其删除。

  2.若删除节点只有一个子节点,则删除该节点后其子节点代替其位置。

  3.若删除节点有两个子节点,交换删除节点与其后继节点。重复直到删除节点满足①或②,删除之。

删除结束后对红黑树进行调整

  1.若删除节点为红色,不需要调整,仍然是红黑树。

  2.若删除节点为黑色,那么我们假设代替删除节点初始位置的节点继承了删除节点的黑色,将这个多余的黑色向树根移动即可。存在三种情况:

    (1)若多余的黑色所在的节点为红色,则将该节点涂为黑色即可恢复红黑树性质。

    (2)若多余的黑色所在的节点为黑色,且该节点为根,则不需要调整,仍然是红黑树。

    (3)若多余的黑色所在的节点为黑色,但该节点不为根,则存在四种情况

      Case 1:当前节点的兄弟节点为红色

        ①将当前节点的兄弟节点涂为黑色

        ②将当前节点的父节点涂为红色

        ③以当前节点的父节点为轴进行左旋

      Case 2:当前节点的兄弟节点为黑色,且兄弟节点的子节点均为黑色

        ①将当前节点的兄弟节点设为红色

        ②将当前节点多余的黑色移动到其父节点

      Case 3:当前节点的兄弟节点为黑色,且兄弟节点的左子节点为红色,右子节点为黑色

        ①将当前节点的兄弟节点的左子节点涂为黑色

        ②将当前节点的兄弟节点涂为红色

        ③以当前节点的兄弟节点为轴进行右旋

      Case 4:当前节点的兄弟节点为黑色,且兄弟节点的右子节点为红色,左子节点为红色或黑色

        ①将当前节点的兄弟节点涂为其父节点的颜色

        ②将当前节点的父节点涂为黑色

        ③将当前节点的兄弟节点的右子节点涂为黑色

        ④以当前节点的父节点为轴进行左旋

        ⑤将当前节点设置为根节点

以上是关于算法学习笔记:红黑树的主要内容,如果未能解决你的问题,请参考以下文章

算法导论 红黑树 学习 删除

数据结构学习笔记-排序/队/栈/链/堆/查找树/红黑树

算法导论之红黑树的学习

程序员面试算法研究编程艺术红黑树机器学习5大系列集锦

《 常见算法与数据结构》平衡查找树——红黑树(附动画)

算法导论读书笔记-第十三章-红黑树