0.父节点为黑色,不需要任何操作

红黑树插入/删除的几种情况_父节点

 1.新插入的节点父节点为红色,叔叔节点也为红色操作步骤

  •  首先将叔叔和父节点改为黑色,爷爷节点改为红色,进入下一步
  • 将爷爷节点作为当前插入节点看待,一直进行上面的操作,直到当前结点为根结点,然后将根结点变成黑色
  • 此时变为,新插入节点的父节点为红色,但是叔叔节点变为了黑色。插入结点是左结点,父亲结点是右结点.
  • 此时进行右旋,右旋后插入节点变为9号节点
  • 此时,9号节点作为插入节点,符合父节点为红色,叔叔节点为黑色,并且父亲结点为爷爷结点的右孩子,新插入结点为父亲结点的右孩子的右右情况。
  • 接着我们将父节点和爷爷节点的颜色互换。
  • 在进行一次左旋
  • 结束!

红黑树插入/删除的几种情况_结点_02

红黑树插入/删除的几种情况_插入节点_03


2.新插入的节点的父节点为红色,叔叔节点为黑色的情况:

下图插入的节点的父节点为红色(#2),叔叔节点为黑色(1号的左叶子节点也算叔叔节点),这个时候,父亲结点为爷爷结点的右孩子,新插入结点为父亲结点的右孩子(右右情况),只要将父节点和爷爷节点颜色互换,并针对爷爷节点做一次左旋,如下图即可。

红黑树插入/删除的几种情况_父节点_04

 下图插入的节点的父节点为红色(#7),叔叔节点为黑色(#8的右叶子节点也算叔叔节点),这个时候,父亲结点为爷爷结点的左孩子,新插入结点为父亲结点的左孩子(左左情况),只要将父节点和爷爷节点颜色互换,并针对爷爷节点做一次右旋,如下图即可。

红黑树插入/删除的几种情况_插入节点_05


3.父亲结点为红色结点的情况下,叔叔结点也为红色结点,将叔叔和父亲结点改为黑色,爷爷结点改为红色,未完,然后又将爷爷结点当作插入结点看待,一直进行上面的操作,直到当前结点为根结点,然后将根结点变成黑色

红黑树插入/删除的几种情况_结点_06

红黑树插入/删除的几种情况_结点_07


 4.父亲结点为红色结点的情况下, 叔叔结点为黑色结点的情况。父亲结点为左孩子,插入结点为右孩子。针对父节点进行左旋转,左旋后,必定出现2中的情况,进行相应的左旋或者右旋即可。

红黑树插入/删除的几种情况_父节点_08

右-左,左-右的情况:

红黑树插入/删除的几种情况_父节点_09

红黑树插入/删除的几种情况_父节点_10


同一组数据,只是创建树的时候输入的顺序不同,它们创建的树形是一样的吗?

不是的!

比如按照1,2,3,4,5输入创建红黑树和按照5,4,3,2,1的顺序创建红黑树,它们是不同的形状:

红黑树插入/删除的几种情况_父节点_11

 以及:

和,3,2,4,1,5

红黑树插入/删除的几种情况_父节点_12


结束!