红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。
本篇文章引用了这篇文章的内容,作此声明。
特征
- 根节点是黑色的。
- 所有节点是黑色或红色的。
- 每个叶节点(NIL或空节点)是黑色;
- 每个红色节点的两个子节点都是黑色的,也就是两个节点(父节点与子节点)不能是同样的颜色。
- 从任一节点到其每个叶节点的所有路径都包含相同数目的黑色节点
插入
因为红黑树本质上还是一个平衡树,所以它的插入还是需要满足平衡树插入的法则。只不过多添加了颜色的标准。
一般插入的结点都是红色的。
- 这边就统说一下,在插入后不会影响二叉树的平衡性,是不会去动的。这与正常的平衡树是一致的。
- 当插入结点为左结点,并且父节点为红色,叔叔结点为黑色时,将父节点进行右旋转,将祖父节点和父节点的颜色进行互换。
3. 当插入结点为父节点的右结点时,先将父节点和插入节点进行左选择,之后就按照上面的情况进行。
4. 当插入结点,父节点和叔叔结点都为红色时。这个时候,只需将父亲节点和叔叔节点涂黑,将祖父节点涂红。
如果出现了不符合规则的情况,则要进行选择,也就按照上诉规则来进行。
这里我列举了在左子树上的插入情况,在右边是同样的。
这里借用这篇文章的例子来试一试。红黑树
在原树上插入20
按照上诉所说,将21与25涂黑,22涂红
发现17与22冲突,这时候可以看成在原红父节点的右边插入了一个新的结点,所以进行左旋转。
最后根据规则,修改颜色。
这样一个插入就完成了。