一、定义
- 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
- 红黑树是一种特化的AVL树(平衡二叉树),它的左右子树高差有可能大于1,所以红黑树不是严格意义上的平衡二叉树(AVL).
- 红黑树和平衡二叉树都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。
- 红黑树进行平衡的代价较低,其平均统计性能要强于AVL。
二、特征
- 红黑树是每个结点都带有颜色属性的二叉查找树
- 结点颜色是红色或黑色
- 根节点是黑色
- 所有叶子节点(NIL)都是黑色(这里叶子节点,是指为空(NIL或BULL)的叶子节点)
- 每个红色节点的两个子节点都是黑色(从每个结点到根的所有路径上不能有两个连续的红色节点)
- 从任一节点其每个叶子的所有路径都包含相同数目的黑色节点
- 从根节点到叶子的最长的可能路径不多于最短的可能路径的两倍长,结果是这个树大致上是平衡的
三、优点
- 从根节点到叶子的最长的可能路径不多于最短的可能路径的两倍长,使得这个树大致上是平衡的。
- 因为操作如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。
- 路径上不能有两个连续的红色节点。最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色节点。
- 所有最长的路径都有相同数目的黑色节点,这就表明没有路径能多于任何其他路径的两倍长。
- 红黑树是一种特化的二叉查找树,所以红黑树上的只读操作与普通的二叉查找树相同。
四、红黑树的应用
- 红黑树应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(logn),效率非常之高。
- Java集合中的TreeSet和TreeMap是通过红黑树实现的。
五、相关结论(定理)
- 一棵含有n个节点的红黑树的高度至多为2*log(n+1)
要证明,可以通过证明其逆否命题的正确性,我就不在此证明了,只提供一个思路
|