AVL树与红黑树的比较

红黑树比AVL树的效率

如果插入一个node引起了树的不平衡,AVL和RB-Tree都是最多只需要2次旋转操作,即两者都是O(1);但是在删除node引起树的不平衡时,最坏情况下,AVL需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级O(logN),而RB-Tree最多只需3次旋转,只需要O(1)的复杂度。

作者:Acjx
链接:https://www.zhihu.com/question/20545708/answer/58717264
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

避免红黑树的高度差等于log(n)

而红黑树的高度差,红黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。
既然红黑树理论上缺陷如此大,那为什么实际应用中反而采纳较多?深入研究红黑树的具体实现方式,可以发现,红黑树在实际应用中的实现形式已经超出其原本定义的规则。红黑树的理论阐述不够完善,也是其难于理解和新手难以自己动手实现的原因之一。(注:本文采纳Mark Allen Weiss的《Data Structures and Algorithm Analysis in Java》一书当中对于红黑树的实现方式,这也是实际中使用最多的实现方式)。

经过我的归纳总结,现实中的红黑树在实现过程中增加了以下限制条件:

5.新插入的节点必须为红色。

6.任意节点其左右子树最多相差2层红节点。

7.插入过程(仅限于插入点那条路径上)中不允许任一节点有2个红色儿子节点。

增加了以上三条限制条件的红黑树甚至都不需要再多加分析了。规则6和7建立在规则5和红黑树复杂的插入调整的基础之上,规则6恰巧直接阻止了经典平衡二叉树出现最差情形的可能性,规则7甚至是对红黑树到AA树(AA树实现尚不完善,目前实际性能较差,本文不做深入讨论)的一种过渡。以下图展示了连续向红黑树中插入右节点(依次插入30,40,50,60,70,80,90,100)的变化过程
链接:https://blog.csdn.net/yuhk231/article/details/51218244

你可能感兴趣的:(C++)