来,继续,听说红黑树删除比插入要复杂,来试试看,机智如你我,怕甚(*^__^*) ……

 

目录

第一点  你的名字

第二点  为何是你

第三点  你的性质

第四点  开始删除

 

 

第一点  你的名字

作为老牌电影,我们恶心一点,首先介绍下约定的出场演员名单:

          D:需要删除的节点

          M:删除节点D后被选中取代D位置的节点

          P:M的爸爸(父节点)—————-打酱油的,没什么用

          S:M的姐妹节点

          L:节点的左子节点

          R:节点的右子节点

          SL:S节点的左子节点

          SRR:S节点的右子节点的右子节点

SRRR:这种不用去管,因为这场电影用不到它也没给它准备盒饭,我穷o(╯□╰)o

 

 

第二点  为何是你

 

M:还记得【数据结构学习笔记】_红黑树之基础知识(一)里面提到的:

      “如果要删除的节点有左右孩子,则找左子树的最大值或者右子树的最小值,来替换要删除的节点,然后删除需要删除的节点”吗?

       Q1:为什么要这样选呢?

        A1:这是个有序的东东,删除一个节点,当然是让它值相邻的两个手牵手了,“左子树的最大值或者右子树的最小值”不就是它值相邻的两个吗

        A2:自己想象或者度娘吧

把二叉树想象成真正的一颗树,M就是从最靠近树干两侧的节点里面取的

 

 

第三点  你的性质

 

左子树的最大值M为例:

1、首先M是没有右子树的(因为M的定义就是“需要删除的节点D的左子树的最大值”,就是从D的左子树往下,节点有右孩子就继续找其右孩子,一直到没有右孩子为止);

 

2、如果M是红色;

      1)P是黑色的—————————因为如果是红色就违背了红黑树气质第4条

      2)M没有左孩子————————因为如果是红色就违背了红黑树气质第4条,如果是黑色就违背了红黑树气质第5条

      3)S要么是空节点、要么是红色节点(下面只有NIL节点了哟)————————如果是黑色就违背了红黑树气质第5条

 

3、如果M是黑色;

      A)对于M:

         情形1:M没有左孩子

         情形2:M有左孩子(肯定是红色),而且下面没有子节点了————————-因为如果是黑色就违背了红黑树气质第5条

      B)对于S:

         情形1:S如果是红色

                      1)S下肯有左右两个黑色子节点————————-红下面不能为红

                      2)S下左右子节点的左右子节点如果存在就必须为红色,而且下面再无子节点,即有SLL、SLR、SRL、SRR,没有类似SLLL————————-红下面不能为红、路径上黑点数目要一致

         情形2:S如果是黑色

                      1)S下如果有左右子节点必为红色————————-路径上黑点数目要一致

                      2)S下左右子节点没有子节点,即有SL、SR没有类似SLL————————-红下面不能为红

 来,说人话上图:

 

 

第四点  开始删除

 

版权声明:本文为zmhsoup原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/zmhsoup/p/8042363.html