一颗非严格均衡的二叉搜索树
他有着6个规则
-
节点分为红色和黑色
-
根节点必须为黑色
-
叶子节点都为黑色,且为null
-
连续红色节点的两个子节点都为黑色,不会有相邻的红色节点
-
从任意的节点出发,到其每个叶子节点路径中包含相同数量的黑色节点,就是从任何节点出发,到达的每一个叶子节点的路上,都是经过数量一致(不会多也不会少)的黑色节点
-
新加入到红黑树的节点为红色节点
当不满足这几个规则的时候,就会开启自动平衡机制调整节点平衡状态
变色
当出现两个相邻的红色的时候,那么新加入的红色节点的父节点,就会去改变颜色。当然是在满足规则的情况下,进行变色,但有些时候通过变色并不会完全满足红黑树,所以这时候就需要旋转来解决
旋转
左旋:逆时针去旋转两个节点,让一个节点被其右子节点取代,然后这个节点成为这个右节点的左子节点
右旋:顺时针去旋转两个节点,让一个节点被其左节点取代,然后这个
节点成为这个左节点的右子节点
左左节点旋转(就是父节点和插入的节点都是左边的节点):以祖父节点进行右旋并变色。
左右节点旋转(就是父节点是左节点,插入的是右节点):先把父节点进行左旋,然后祖父节点进行右旋,最后变色
右左节点旋转(就是父节点是右节点,插入的是左节点):先父节点右旋,然后祖父节点进行左旋,最后变色
右右节点旋转(就是父节点和插入的节点都是右边的节点):以祖父节点进行左旋并变色