红黑树是配合二叉树的一种实现,主要要满足以下性质:
1.根节点必须为黑色
2.父子不能同为红色
3.从任何节点出发,到达叶节点经过的黑色节点数量一致
对每个新插入的节点存在以下情况:
1.没有爸爸:
那么它自己变为黑色,做根节点。
2.爸爸是黑色
直接插入
3.爸爸是红色
这种情况有两种子情况
3.1uncle节点(父节点的兄弟节点)也是红色
新插入的为红色,爸爸变为黑色,uncle也变为黑色,祖父变为红色。
然后祖父网上递归以上过程。
3.2uncle是黑色。以祖父节点为基准右旋,在手撕JAVA十三中已经介绍过右旋其实就是将当前提上去,原来在上一级的节点压下来,当前节点的右子树,给原来上一级节点做他的左子树。