一、基本概念
红黑树是一种自平衡二叉搜索树,节点只有红色和黑色两种颜色。
二、基本性质
- 节点是红色和黑色;
- 根节点必须是黑色;
- 每个叶节点(NULL节点----空节点)都必须是黑色;
- 每个红节点的两个子节点都是黑色,即每个叶节点到根节点的路径上面不能出现连续的红色节点;
- 任意节点到到其对应的叶子节点的每条路径上的黑色节点的数量是一样的
三、左旋和右旋
- 左旋
左旋示意图 - 右旋
右旋示意图
四、插入操作
插入的节点为红色
8. case1:插入的是根节点
原树为空,此时违反了性质2
对策:直接把此节点涂黑
9. case2:插入的节点的父节点是黑色
对策:啥都不用做
10. case3:当前节点的父节点是红色且祖父节点的另一个子节点(叔叔节点)是红色
对策:将当前节点的父节点和叔叔节点涂黑,祖父节点涂红;
把当前节点指向祖父节点,从新的当前节点重新开始计算。
11. case4:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子节点
对策:当前节点的父节点作为新的当前节点,以新当前节点为支点左旋
12. case5:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左子节点
对策:父节点变为黑色,祖父节点变为红色,以祖父节点为支点右旋
总结
插入操作只要对照case3、4、5几种情况即可,前2种基本没啥参考价值。