0.父节点为黑色,不需要任何操作
1.新插入的节点父节点为红色,叔叔节点也为红色操作步骤
- 首先将叔叔和父节点改为黑色,爷爷节点改为红色,进入下一步
- 将爷爷节点作为当前插入节点看待,一直进行上面的操作,直到当前结点为根结点,然后将根结点变成黑色
- 此时变为,新插入节点的父节点为红色,但是叔叔节点变为了黑色。插入结点是左结点,父亲结点是右结点.
- 此时进行右旋,右旋后插入节点变为9号节点
- 此时,9号节点作为插入节点,符合父节点为红色,叔叔节点为黑色,并且父亲结点为爷爷结点的右孩子,新插入结点为父亲结点的右孩子的右右情况。
- 接着我们将父节点和爷爷节点的颜色互换。
- 在进行一次左旋
- 结束!
2.新插入的节点的父节点为红色,叔叔节点为黑色的情况:
下图插入的节点的父节点为红色(#2),叔叔节点为黑色(1号的左叶子节点也算叔叔节点),这个时候,父亲结点为爷爷结点的右孩子,新插入结点为父亲结点的右孩子(右右情况),只要将父节点和爷爷节点颜色互换,并针对爷爷节点做一次左旋,如下图即可。
下图插入的节点的父节点为红色(#7),叔叔节点为黑色(#8的右叶子节点也算叔叔节点),这个时候,父亲结点为爷爷结点的左孩子,新插入结点为父亲结点的左孩子(左左情况),只要将父节点和爷爷节点颜色互换,并针对爷爷节点做一次右旋,如下图即可。
3.父亲结点为红色结点的情况下,叔叔结点也为红色结点,将叔叔和父亲结点改为黑色,爷爷结点改为红色,未完,然后又将爷爷结点当作插入结点看待,一直进行上面的操作,直到当前结点为根结点,然后将根结点变成黑色
4.父亲结点为红色结点的情况下, 叔叔结点为黑色结点的情况。父亲结点为左孩子,插入结点为右孩子。针对父节点进行左旋转,左旋后,必定出现2中的情况,进行相应的左旋或者右旋即可。
右-左,左-右的情况:
同一组数据,只是创建树的时候输入的顺序不同,它们创建的树形是一样的吗?
不是的!
比如按照1,2,3,4,5输入创建红黑树和按照5,4,3,2,1的顺序创建红黑树,它们是不同的形状:
以及:
和,3,2,4,1,5