平衡树、AVL树:https://www.cnblogs.com/Benjious/p/10336145.html
伸展树:https://www.cnblogs.com/Benjious/p/10346084.html
B树:https://www.cnblogs.com/Benjious/p/10353733.html
红黑树:https://www.cnblogs.com/Benjious/p/10389338.html
红黑树为什么能达到半平衡(最深的叶子节点的深度不会大于两倍的最短叶子节点的深度)?
因为红色节点不能与红色节点相连,且所有路径的黑色节点个数相同,因此最长路径是红黑交替节点路径,所以最短路径必然是只包含黑色节点的路径,于是从根节点到叶子节点的的最长路径不会超过最短路径的两倍。
红黑树相比AVL的优点:
-
如果插入一个node引起了树的不平衡,AVL和RB-Tree都是最多只需要2次旋转操作,即两者都是O(1);但是在删除node引起树的不平衡时,最坏情况下,AVL需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级O(logN),而RB-Tree最多只需3次旋转,只需要O(1)的复杂度。
-
其次,AVL的结构相较RB-Tree来说更为平衡,在插入和删除node更容易引起Tree的unbalance,因此在大量数据需要插入或者删除时,AVL需要rebalance的频率会更高。因此,RB-Tree在需要大量插入和删除node的场景下,效率更高。自然,由于AVL高度平衡,因此AVL的search效率更高。
-
map的实现只是折衷了两者在search、insert以及delete下的效率。总体来说,RB-tree的统计性能是高于AVL的。
作者:Acjx
链接:http://www.zhihu.com/question/20545708/answer/58717264
红黑树删除:
删除操作
若X左右子节点都非空,则将X数据与其后继或前驱交换(颜色不换),实际被删除的是X的前驱或后继,所以k必为NULL。
等效为: