手撕JAVA(十四)红黑树(上)调色篇

红黑树是配合二叉树的一种实现,主要要满足以下性质:

1.根节点必须为黑色

2.父子不能同为红色

3.从任何节点出发,到达叶节点经过的黑色节点数量一致

对每个新插入的节点存在以下情况:

1.没有爸爸:

那么它自己变为黑色,做根节点。

手撕JAVA(十四)红黑树(上)调色篇_第1张图片

2.爸爸是黑色

直接插入

手撕JAVA(十四)红黑树(上)调色篇_第2张图片

3.爸爸是红色

这种情况有两种子情况

3.1uncle节点(父节点的兄弟节点)也是红色

新插入的为红色,爸爸变为黑色,uncle也变为黑色,祖父变为红色。

然后祖父网上递归以上过程。

手撕JAVA(十四)红黑树(上)调色篇_第3张图片

3.2uncle是黑色。以祖父节点为基准右旋,在手撕JAVA十三中已经介绍过右旋其实就是将当前提上去,原来在上一级的节点压下来,当前节点的右子树,给原来上一级节点做他的左子树。

手撕JAVA(十四)红黑树(上)调色篇_第4张图片

 

你可能感兴趣的:(手撕JAVA(十四)红黑树(上)调色篇)