概述
红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫•贝尔发明的,他称之为"对称二叉B树",它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中得到的。数组
五个性质
红黑树的五个性质:数据结构
- 每一个结点或是红色的,或是黑色的。
- 根结点是黑色的。
- 每一个叶结点(NIL)是黑色的。
- 若是一个结点是红色的,则它的两个子结点都是黑色的。
- 对每一个结点,从该结点到其全部叶子结点的简单路径上,均包含相同数目的黑色结点。

插入
按照BST的规则增长结点并标记它为红色,为何是红色呢?缘由以下:ui
- 若设置为黑色,就会致使根到叶子的路径上有一条路径上多了一个黑色结点,很难调整(性质5)。
- 设置为红色结点后,可能会致使出现两个连续红色结点的冲突,那么能够经过颜色调换和数旋转来调整(性质4)。
1.新结点位于树根
新节点位于树根,直接变为黑色便可。blog

2.新结点的父结点为黑色(黑父)
该条件下,插入一个红色结点不会影响红黑树的平衡。计算机科学
- 新增结点为红色的,任何一条简单路径都没有增长黑色结点的个数。
- 该种状况较为常见,从而使得红黑树须要旋转调整的概率相对AVL树少一些。

3.新结点的父结点为红色(红父)
新结点的父结点是红色,祖父结点必定是黑色,须要根据叔叔结点来决定进行什么样的操做。im
叔叔结点也是红色
- 祖父结点变为红色。
- 父结点变为黑色。
- 叔叔结点变为红色。

叔叔结点为黑色或者没有叔叔
情形1:新结点N为父结点P的右孩子,而P是其父结点的左孩子
- 进行先左再右旋转。
- 新结点变为黑色,祖父结点变为红色。

情形2:新结点N是父结点的左孩子,P是父结点的右孩子
- 进行先右再左旋转。
- 新结点变为黑色,祖父结点变为红色。

情形3:新结点N和父结点P都是左孩子

情形4:新结点N和父结点P都是右孩子
- 先进行左旋转。
- 父结点变为黑色,祖父结点变为红色。

以上四种旋转结束后,根均为黑色,不须要向上继续进行平衡操做。数据