红黑树(Red–black tree)是一种自平衡二叉查找树。
红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
(1)节点是红色或黑色。
(2) 根是黑色。
(3) 所有叶子都是黑色(叶子是NIL节点)。
(4)每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
(5)从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
AVL PK RBT
红黑树和平衡二叉树的比较:
AVL 和RBT 都是二叉查找树的优化。其性能要远远好于二叉查找树。他们之间都有自己的优势,其应用上也有不同。
1、结构对比: AVL的结构高度平衡,RBT的结构基本平衡。平衡度AVL > RBT。
2、查找对比: AVL 查找时间复杂度最好,最坏情况都是O(logN)。 RBT 查找时间复杂度最好为O(logN),最坏情况下比AVL略差。
3、插入删除对比: 1. AVL的插入和删除结点很容易造成树结构的不平衡,而RBT的平衡度要求较低。因此在大量数据插入的情况下,RBT需要通过旋转变色操作来重新达到平衡的频度要小于AVL。 2. 如果需要平衡处理时,RBT比AVL多一种变色操作,而且变色的时间复杂度在O(logN)数量级上。但是由于操作简单,所以在实践中这种变色仍然是非常快速的。 3. 当插入一个结点都引起了树的不平衡,AVL和RBT都最多需要2次旋转操作。但删除一个结点引起不平衡后,AVL最多需要logN 次旋转操作,而RBT最多只需要3次。因此两者插入一个结点的代价差不多,但删除一个结点的代价RBT要低一些。 4. AVL和RBT的插入删除代价主要还是消耗在查找待操作的结点上。因此时间复杂度基本上都是与O(logN) 成正比的。
总体评价:大量数据实践证明,RBT的总体统计性能要好于平衡二叉树。
AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?
AVL树:最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树
红黑树:平衡二叉树,广泛用在C++的STL中。map和set都是用红黑树实现的。
B/B+树:用在磁盘文件组织 数据索引和数据库索引 。
Trie树: 字典树,用在统计和排序大量字符串,搜索引擎下拉框。
学习资料:
1、红黑树数据结构剖析 http://www.cnblogs.com/fanzhidongyzby/p/3187912.html
2、红黑树 http://blog.youkuaiyun.com/eric491179912/article/details/6179908
3、七月算法 红黑树 http://blog.youkuaiyun.com/v_JULY_v/article/category/774945
4、TreeMap和红黑树 http://blog.youkuaiyun.com/chenssy/article/details/26668941
5、【查找结构6】动态查找树比较 http://blog.youkuaiyun.com/guoweimelon/article/details/50904307
6、为什么STL和linux都使用红黑树作为平衡树的实现? https://www.zhihu.com/question/20545708
7、红黑树比 AVL 树具体更高效在哪里?https://www.zhihu.com/question/19856999
8、AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中? https://www.zhihu.com/question/30527705