红黑树插入与删除

数据结构之红黑树插入与删除全程演示

 

引言

    目前国内图书市场上,抑或网上讲解红黑树的资料层次不齐,混乱不清,没有一个完整而统一的阐述。而本人的红黑树系列四篇文章,虽然从头至尾,讲的有根有据,层次清晰,然而距离读者真正做到红黑树了然于胸,则还缺点什么。
    而我们知道,即便在经典的算法导论一书上,也没有把所有的插入、删除情况一一道尽,直接导致了不少读者的迷惑,而红黑树系列第4篇文章:一步一图一代码,一定要让你真正彻底明白红黑树,虽然早已把所有的插入、删除情况都一一道尽了,但也缺了点东西。
    缺点什么东西呢?对了,缺的就是一个完完整整的,包含所有插入、删除情况全部过程的全程演示图,即缺一个例子,缺一个完整的图来从头至尾阐述这一切。
    ok,本文,即以40幅图来全程演示此红黑树的所有插入和删除情况。相信,一定会对您理解红黑树有所帮助。
    话不絮烦,下面,本文便以此篇文章:一步一图一代码,一定要让你真正彻底明白红黑树为纲,从插入一个结点到最后插入全部结点,再到后来一个一个把结点全部删除的情况一一阐述。
    为了有个完整统一,红黑树插入和删除情况在此合作成一篇文章。同时,由于本人的红黑树系列的四篇文章已经把红黑树的插入、删除情况都一一详尽的阐述过了,因此,有关红黑树的原理,本文不再赘述,只侧重于用图来一一全程演示结点的插入和删除情况。

    有任何问题,欢迎指正。

 

一、红黑树的插入情况全程演示

    通过红黑树系列的文章,我们已经知道,红黑树的所有插入情况分为以下五种:

    情况1:新结点N位于树的根结点,没有父结点

    情况2:新结点的父结点P是黑色

   情况3:父结点P、叔叔结点U,都为红色

    【对应于第二篇文章中的情况1:z的叔叔是红色的】

   情况4:父结点P是红色的,叔叔结点U是黑色或NULL

    【对应第二篇文章中的情况2:z的叔叔是黑色的,且z是右孩子】

    情况5:父结点P是红色,而叔叔结点U是黑色或NULL

    要插入的结点N是其父结点的左孩子,而父结点P又是其祖父G的左孩子

    【对应第二篇文章中情况3:z的叔叔是黑色的,且z是左孩子】

    首先,各个结点插入与以上的各种插入情况,一一对应起来,如下图所示。

 

 

    以下是20张图,是依次插入这些结点:12    1    9    2    0    11    7    19    4    15    18    5    14    13    10    16    6    3    8    17的全程演示图,已经把所有的5种插入情况,都涉及到了。

    第一图:插入结点12

 

   

    第二图:插入结点1

 

    

    第三图:插入结点9

 

    

    第四图:插入结点2

 

    

    第五图:插入结点0

 

    

    第六图:插入结点11

 

   

     第七图:插入结点7

 

    

    第八图:插入结点19

 

    

    第九图:插入结点4

 

    

    第十图:插入结点15

 

    

    第十一图:插入结点18

 

    

    第十二图:插入结点5

 

   

    第十三图:插入结点14

 

    

    第十四图:插入结点13

 

    

    第十五图:插入结点10

 

    

    第十六图:插入结点16

 

    

    第十七图:插入结点6

 

    

    第十八图:插入结点3

 

    

    第十九图:插入结点8

 

    

    第二十图:插入结点17

 

 

    

二、红黑树的删除情况全程演示

    红黑图的所有删除情况,如下所示。

    情况1:N是新的根

    情况2:兄弟结点S是红色的

    【对应于第二篇文章中情况1:x的兄弟结点w是红色的】

    情况3:兄弟结点S是黑色的,却S的两个儿子都是黑色的。但N的父结点P是黑色

    【对应于第二篇文章中情况2:x的兄弟结点w是黑色的,且兄弟结点w的两个儿子都是黑色的】

    (这里,N的父结点P为黑色)

    情况4:兄弟结点S是黑色的,S的儿子也都是黑色的,但是N的父亲P是红色

    【对应于第二篇文章中情况2:x的兄弟结点w是黑色的,且w的两个孩子结点都是黑色的】

    (这里,N的父结点P为红色)

    情况5:兄弟结点S为黑色,S的左孩子为红色,S的右孩子是黑色,而N是它父结点的左儿子

    //此种情况,最后转化为下面的情况6

    【对应于第二篇文章中情况3:x的兄弟w是黑色的,w的左孩子是红色的,w的右孩子是黑色】

    情况6:兄弟结点S是黑色的,S的右孩子是红色的,而N是它父结点的左儿子

    【对应于第二篇文章中情况4:x的兄弟结点w是黑色的,且w的右孩子是红色的】

 

    各个结点的删除与以上六种情况一一对应起来,如下图所示。

 

    首先,插入上述结点后,形成的红黑树为:

 

 

    然后,以下的20张图,是一 一删除12    1    9    2    0    11    7    19    4    15    18    5    14    13    10    16    6    3    8    17所得到的删除情况的全程演示图。

   第一图:删除结点12

 

    

    第二图:删除结点1

 

 

    第三图:删除结点9

 

 

    第四图:删除结点2

 

 

    第五图:删除结点0

 

 

    第六图:删除结点11

 

    第七图:删除结点7

 

 

    第八图:删除结点19

 

 

    第九图:删除结点4

 

 

     第十图:删除结点15

 

   

 

    第十一图:删除结点18

 

 

    第十二图:删除结点5

 

 

    第十三图:删除结点14

 

 

    第十四图:删除结点13

 

 

    第十五图:删除结点10

 

 

    第十六图:删除结点16

 

 

    第十七图:删除结点6

 

 

    第十八图:删除结点3

 

 

    第十九图:删除结点8

 

 

    第二十图:删除结点17

 

 

posted @ 2015-05-25 20:05  苍穹冰尘  阅读(158)  评论(0编辑  收藏  举报
Live2D