首页 > 技术文章 > 【数据结构学习笔记】_红黑树之节点插入(三)

zmhsoup 2017-12-19 16:31 原文

来,继续,看红黑色的插入~

 

目录

第一点  你的名字

第二点  开始插入

 

第一点  你的名字

再次介绍下约定的出场演员名单:

          N:需要插入的节点

          P:N需要插入的位置的爸爸(父节点)

          U:N需要插入的位置的叔叔节点(P的姐妹节点)

          G:N需要插入的位置的爷爷(祖父节点)

 

N:还记得【数据结构学习笔记】_红黑树之基础知识(一)里面提到的“搜索二叉树的插入”吗?:

          1、如果是空树,则作为根节点;

          2、不是空树则从根节点搜索,

                1)值小于当前节点,该节点有左孩子,一直找下去,直到没有左孩子,插入的节点作为左孩子;

                2)值大于当前节点,该节点有右孩子,一直找下去,直到没有右孩子,插入的节点作为右孩子;

 

红黑树也遵循这个规则,然后做一些着色和旋转处理:

 

第二点  开始插入

 按上面分析的4大类(N的颜色+P的颜色+U的颜色)7种场景(Case7)来具体分析,插入节点后需要做的操作:


 Case1 ~~~情形:N(0010)就是根节点

          ~~~策略为:直接插入N,然后将N的颜色(新插入的节点都是红色)由红色变成黑色

  


 Case2 ~~~情形:N不是根节点,它需要插入位置的P是黑色

          ~~~策略为:直接插入N

 

 


 Case3 ~~~情形:N不是根节点,它需要插入位置的P是红色、叔叔U也是红色

          ~~~策略为:将P和U变成黑色,将G变成红色,作为新插入的节点一样的再次判断

 


 

 Case4 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                           2、N和P和G在一条直线上、N是P的左孩子

          ~~~策略为:右旋G


 Case5 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                           2、N和P和G在一条直线上、N是P的右孩子

          ~~~策略为:左旋G

 


 

 Case6 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                           2、N和P和G不在一条直线上、N是P的左孩子

          ~~~策略为:N首先变成P的父节点,原来的P成为N的右孩子,然后再左旋新的P

 

 


 Case7 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                           2、N和P和G不在一条直线上、N是P的右孩子

          ~~~策略为:N首先变成P的父节点,原来的P成为N的左孩子,然后再左旋新的P

 

 

推荐阅读