介绍另外一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和 Robert Sedgewick改为一个比较摩登的名字:红黑树。数据结构
红黑树和以前所讲的AVL树相似,都是在进行插入和删除操做时经过特定操做保持二叉查找树的平衡,从而得到较高的查找性能。自从红黑树出来后,AVL树就被放到了博物馆里,听说是红黑树有更好的效率,更高的统计性能。不过在我了解了红黑树的实现原理后,并不相信这是真的,关于这一点咱们会在后面进行讨论。性能
红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树中的很是严格的平衡。以前咱们在讲解AVL树时,已经领教过AVL树的复杂,但AVL树的复杂比起红黑树来讲简直是小巫见大巫。红黑树是真正的变态级数据结构。ui
红黑树首先是一棵二叉查找树,它每一个结点都被标上了颜色(红色或黑色),红黑树知足如下5个性质:spa
一、 每一个结点的颜色只能是红色或黑色。效率
二、 根结点是黑色的。原理
三、 每一个叶子结点都带有两个空的黑色结点(被称为黑哨兵),若是一个结点n的只有一个左孩子,那么n的右孩子是一个黑哨兵;若是结点n只有一个右孩子,那么n的左孩子是一个黑哨兵。二叉树
四、 若是一个结点是红的,则它的两个儿子都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。统计
五、 对于每一个结点来讲,从该结点到其子孙叶结点的全部路径上包含相同数目的黑结点。数据