例如:
不平衡的树:
4
/ \
1 11
/
7
/ \
5 9
平衡后,它将成为AVL树:
11
/ \
4 7
/ / \
1 5 9
但是,如果不平衡树是这样的R-B树:
(\\表示读指针。\表示黑色指针。)
4
/ \\
1 11
/
7
// \\
5 9
这是合法的R-B树吗?或者我应该像我对树做的那样平衡它?
答案 0 :(得分:2)
AVL树的平衡条件不同于红黑树的平衡条件。从某种意义上说,AVL树比红黑树更平衡。
在AVL树中,对于每个节点v
,v
的右子树的高度与v
的左子树的高度之间的差异必须与红黑树相比,这是一种非常严格的平衡特性。在红黑树中,从根到叶子的简单路径不允许超过任何其他路径的两倍。此属性由five color conditions二进制搜索树必须满足才能被视为有效的红黑树。
您的示例红黑树在AVL意义上确实不平衡,因为根的左子树的高度与其右子树的高度之间的差异为2.尽管如此,树在红黑感,因为它满足五种红黑色条件。
AVL平衡条件意味着the height of an AVL tree is bounded by roughly 1.44log(n),而没有任何东西阻止红黑树的高度变大:红黑树平衡条件仅暗示a bound of 2log(n)高度。
事实上,AVL树往往比红黑树短,这似乎表明它们必须表现得更好。情况不一定如此:AVL树确实通常更快搜索,因为它比红黑树更平衡。但AVL树如此平衡的原因在于保持平衡在计算上比保持红黑树平衡更难。特别是,与相应的红黑树中的这些操作相比,AVL rotations使AVL树中的插入和删除速度变慢。