红黑树
性质
- 根节点与每个叶子节点都是黑色
- 每个红色节点的两个子节点一定是黑色
- 任意节点到每个叶子的路径包含相同数量的黑色节点,因此如果一个节点存在黑色子节点,那么该节点肯定有两个子节点
- 因此,红黑树是黑色节点完美平衡的二叉查找树
左旋/右旋
把子树的左/右节点旋转到父节点位置上,即原本的父节点变为左/右节点的子节点,底下的节点也会跟着旋转。
左旋伪代码
// 原本x为y的父节点
// r 右节点,l 左节点,f 父节点
y = x.r
x.r = y.l
if(y.r非空)
y.r.f = x
y.f = x.f
if(x.f非空){
根节点 = y
} else { // 判断y的左右
if(x.f.l == x)
x.f.l = y
else
x.f.r = y
}
y.l = x
x.p = f
插入节点
- 找到插入的位置,算法就是普通的查找算法
- 在插入后调整主结构,进行自平衡处理
删除节点
- 若删除的节点没有子节点,就无需替代节点
- 若删除节点只有一个子节点,用子节点替代删除节点
- 若删除节点有两个子节点,用后继节点(大于被删除节点的最小节点,即右子树的最左节点)替代删除节点

浙公网安备 33010602011771号