红黑树
1.红黑树的概述
红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构
1972年出现,当时被称之为平衡二叉B树. 1978年被修改为红黑树沿用至今.
它是一种特殊的二叉查找树,红黑树的每一个结点都有颜色(红或黑),红黑树不是高度平衡的,它的平衡指的是按照红黑规则来实现的.
1.1红黑树和二叉查找树的区别
二分查找树:
条件:当左右子树高度差超过1时自动激活旋转
红黑树:
红黑树是一个二分查找树,但不是高度平衡的
条件: 自己的红黑规则
2. 红黑规则
- 每个结点要么是红色的,要么是黑色的
- 根结点必须是褐色的
- 如果一个结点没有子结点或者父结点,则该节点想要的指针属性一个为Nil,这些Nil视为叶结点,每个叶结点(Nil)都是黑色的
- 如果某个结点的颜色是红色的,呢么它的子结点必须是黑色的(不能出现两个红色结点相连的情况)
- 对每个结点,从该结点到其后代所有叶结点的简单路径,均包含相同数量的黑色结点
3.添加结点的颜色
- 添加结点的颜色,可以是红色的,也可以是黑色的
- 黑色:添加三个元素,一共需要调整两次
- 红色:添加三个元素,一共需要调整一次
4.添加元素如何保证规则
4.1添加后,父结点和兄弟结点都是红色
- 将父结点设为黑色,将新的结点设为黑色
- 将父结点的父结点设为红色
- 如果父结点的父结点为根结点,则将根结点设为黑色
4.2添加后,父结点为黑色
不需要任何操作
4.3添加后,父结点为红色,兄弟结点为黑色
- 将父结点设为黑色
- 将父结点的父结点设为红色
- 以父结点的父结点为支点进行旋转