在上一篇文章中简单介绍了B与B+树
上篇文章中曾经提到红黑树的查找效率不如B或者B+树,那到底什么才是红黑树那,AVL又是个什么东西那。下面会简单介绍一下:
红黑树是这样的一种树,它有n个节点组成,每个节点包括左右字数的指针,自身的颜色,数值域。对于树有以下五个特殊要求:
1:叶节点只有黑色和红色两种;
2:根节点必须是黑色的;
3:叶子节点都是黑色的;
4:不能存在父子节点同时是红色,可以看出可以是黑色;
5:从任意节点到其每个叶子节点的黑色节点个数相同。
对于红黑树的更加详细的介绍请查看另一篇文章:红黑树详解
通过上述五个要求它能确保树的最长路径不大于两倍的最短路径的长度,那为何能保证不大于两倍最短路径那。可以看要求4,不能存在父子节点同时为红色。所以可以节点颜色顺序可以分两种,红黑交叉或者都为黑色。然后再看要求5,黑色节点个数必须相同。好了,那最长路径的情况只可能是红黑交叉,又因为黑色节点个数必须相同,所以红黑交叉的情况下,黑色等于红色。这个时候正好是二倍最短路径。(大家可以画一下图,一目了然)
对于红黑树的插入与删除节点肯定会对红黑树破坏,必须对其进行调整。调整主要包括树的旋转与对节点的重新着色,但是可以在O(logN)时间复杂度中完成调整的。而在插入的时候一般都会选择插入红色节点,因为在插入红色节点可以尽量避免大范围的调整。由于 AVL 树种类较少所以比红黑树实际上更容易实现.而且 ALV 树在旋转插入所需要的复杂度为 0(1),而红黑树则需要的复杂度为 0(lgn)。
实际上插入 AVL 树和红黑树的速度取决于你所插入的数据.如果你的数据分布较好,则比较宜于采用 AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快的,因为红黑树对已经处理好的数据重新平衡减少了不心要的操作.另外一方面,如果是一种非寻常的插入系列比较常见(比如,插入密钥系列),则 AVL 树比较快,因为它的严格的平衡规则将会减少树的高度。
因为红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。
下面说一下AVL树。AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。因为它是高度平衡的,所以在插入和删除中所做的后期维护操作肯定会比红黑树要耗时好多。但是他们的查找效率是一样子的都是O(logN),所以红黑树应用还是高于AVL树的。