来,继续,看红黑色的插入~
目录
第一点 你的名字
第二点 开始插入
再次介绍下约定的出场演员名单:
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