自平衡
红黑树能够自平衡,依赖自身三种操作:
左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点 右子节点的左子节点变为旋转节点的右子节点,左子节点保持不变
右旋:以某个节点作为支点(旋转节点),其左子节点变为旋转节点的父节点 左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变
变色:节点的颜色由红变黑或由黑变红
节点描述:
红黑树插入场景
P - 父节点
S - 叔叔节点(跟父节点同级)
PP - 祖父节点
注意:方便插入后匹配规则,每次插入时把当前节点临时设为红色。然后套用规则。
1、作为根节点,直接插入 当前为黑色
2、插入节点的父节点为黑色,直接插入,当前节点为红色
3.1 叔叔节点存在且为红色:
当前节点为红色
父节点和叔叔节点设置为黑色
祖父节点设置为红色。以祖父节点为插入点,套用规则。
3.2 叔叔节点不存或者为黑节点
a、父节点是祖父节点的左节点—插入节点为父节点的左节点
插入节点为红色
父节点设为黑色
祖父节点设为红色,对祖父节点右旋
b、父节点是祖父节点的左节点—插入节点为父节点的右节点
将父节点左旋,然后插入当前节点得到上面情景,套用上面规则。
c、父节点是祖父节点的右节点—插入节点为父节点的右节点
当前插入节点为红色
父节点变黑色
祖父节点变成红色,祖父节点(镜像)左旋一次。
d、父节点是祖父节点的右节点—插入节点为父节点的左节点
当前插入节点红色
对父节点右旋一次,得到上面结果,套用规则。