直观地,“平衡树”应该是每个节点的左右子树必须具有“大约相同”数目的节点的树。
当然,当我们谈论红黑树*(请参阅最后的定义)时,实际上是指它们在高度上是平衡的,从某种意义上说,它们是平衡的。
假设我们尝试将上述直觉形式化如下:
定义:二叉树被称为 -balanced,具有,如果对于每个节点,不等式
对于每个,都有一个节点,上面的语句失败。是和的左子树中的节点数。是树下以为根(包括根)的节点数。
我相信,在有关此主题的一些文献中,这些树被称为重量平衡树。
可以证明,如果具有节点的二叉树是平衡的(对于常数),那么树的高度是,因此保持了很好的搜索属性。
所以问题是:
是否有一些使每个足够大的红黑树达到平衡?
我们使用的Red-Black树的定义(来自Cormen等人的Introduction to Algorithms):
二进制搜索树,其中每个节点的颜色为红色或黑色,
- 根是黑色的
- 所有NULL节点均为黑色
- 如果节点为红色,则其两个子节点均为黑色。
- 对于每个节点,从该节点到后代NULL节点的所有路径都具有相同数量的黑色节点。
注意:在上面的 balanced 的定义中,我们不计算NULL节点。(尽管我相信这是否重要)。