1. 红黑树概述
-
二叉查找树
左节点key < 其根节点key < 右节点key -
平衡二叉树
平衡二叉树是对 二叉查找树的一种优化,规定左右两个子树的高度差的绝对值不超过1,这样便提高了查找的效率。 -
红黑树
红黑树是 “平衡二叉树” 的一种实现算法。
红黑树的特性:
- 每个节点或者是黑色,或者是红色
- 根节点是黑色
- 每个叶子结点(NIL,这里的叶子结点不是传统的叶子结点,是指为空的叶子结点)是黑色。
- 如果一个结点是红色的,则它的子结点必须是黑色的
- 从一个结点到该结点的子孙结点的所有路径上包含相同数目的黑结点。
关键词:黑色点的完美平衡,去掉红色点,左右子树黑色节点数目相同,
插入
首先约定插入的新节点的颜色都为红色。然后将该节点插入的按二叉查找树的规则插入到树中。这个节点后文称为N
1. 根节点为空。这种情况,将N的颜色改为黑色即可。
2. N的父节点为黑色。这种情况不需要做修改。
3. N的父节点为红色(根据性质3,N的祖父节点必为黑色)。
(1)N的叔父节点为红色。这种情况,将N的父节点和叔父节点的颜色都改为黑色,若祖父节点是跟节点就将其改为黑色,否则将其颜色改为红色,并以祖父节点为插入的目标节点从情况1开始递归检测。
(2)N的叔父节点为黑色, 且N和N的父节点在同一边(即父节点为祖父的左儿子时,N也是父节点的左儿子。父节点为祖父节点的右儿子时。N也是父节点的右儿子)。以父节点为祖父节的左儿子为例,将父节点改为黑色,祖父节点改为红色,然后以祖父节点为基准右旋。(N为父节点右儿子时做相应的左旋。)
(3)N的叔父节点为黑色,切N和N的父节点不在同一边(即父节点为祖父的左儿子时,N是父节点的右儿子。父节点为祖父节点的右儿子时。N也是父节点左右儿子)。以父节点为祖父节点的左儿子为例。以父节点为基准,进行左旋,然后以父节点为目标插入节点进入情况3的b情况进行操作