红黑树的性质
- 每个节点不是红色就是黑色
- 不可能有连在一起的红色节点
- 根节点都是黑色
- 每个红色节点的两个子节点都是黑色
- 叶子节点都是黑色
旋转和颜色变换规则
- 变换颜色的情况:当前节点的父亲是红色,且它的祖父节点的另一个子节点也是红色(叔叔节点)
- 把父节点设为黑色
- 把叔叔也设为黑色
- 把祖父也就是父亲的父亲设为红色
- 把指针定义到祖父节点设为当前要操作的
- 左旋:当前父节点是红色,叔叔是黑色的时候,且当前的节点是右子树。左旋以父节点作为左旋。
- 右旋:当前父节点是红色,叔叔是黑色的时候,且当前的节点是左子树。右旋
- 把父节点变为黑色
- 把祖父节点变为红色(爷爷)
- 以祖父节点旋转(爷爷)
- 左旋:当前父节点是红色,叔叔是黑色的时候,且当前的节点是右子树。左旋以父节点作为左旋