【问题标题】:Are AVL trees always a subset of red black trees?AVL 树总是红黑树的子集吗?
【发布时间】:2010-09-30 17:02:29
【问题描述】:

我正在寻找所有 AVL 树都可以像红黑树一样着色的证据? 谁能给个证明?

【问题讨论】:

  • 我不明白这个问题。
  • 虽然我们愿意提供帮助,但我们不会为您做功课。因此,请先尝试一下,如果遇到困难,请返回并提出具体问题。
  • @Justice,他正在寻找一个证明,证明所有 avl 树都可以用两种颜色着色,而不需要两个连接的节点具有相同的颜色。
  • color(node) = if is_even(depth(node)) then "black" else "red" ...这真的是问题吗?还是他在问是否可以对 AVL 树进行着色以使其服从红黑树的所有属性?
  • @Justice:我认为是后者

标签: data-structures avl-tree red-black-tree


【解决方案1】:

根据定义,R/B 树的平衡可能比 AVL-s 稍差,如 |maxPath - minPath|对于 AVL 和 maxPath

     4
    / \
   3   6
  /\   /\
 1  E 5  8

是完全合法的 AVL,它不是 R/B,因为 R/B 不能包含叶子,并且必须由始终着色为黑色的空树终止 - 这样您就无法为上面的树着色。 为了使其成为 R/B,您可以将每个叶子 x 转换为节点 E x E 然后遵循以下规则: R/B 树: 必须是 BST 必须只包含黑色或红色的节点和空树 每个红色节点都有黑色孩子 所有空树都是黑色的 给定一个节点,所有到空树的路径必须有相同数量的黑色节点 任何叶子都可以替换为左右子树为空的节点 最大路径 T ≤ 2 * 最小路径 T

顺便说一句,它刚刚将我的节点和叶子染成红色 - 这不是故意的。 卡罗尔

【讨论】:

  • 当然,您可以将上面的树着色为红黑。将 3、4、6 设为黑色。使 1,,5,8 - 红色。根节点为黑色。黑色路径计数在每个方向上都是 2。并且没有亲子都是红色的。所有属性都满足。
【解决方案2】:

红黑树通过红色节点调整分支高度,所以如果高度差是有界的,你总是可以调整所有分支,从最短的黑色分支开始。但这需要非常大的成本,因为你必须计算所有的分支高度。

红黑树的最大局部高度差界限为2。

【讨论】:

    【解决方案3】:

    我怀疑答案是否定的。

    AVL 树的平衡优于 RB 树,这意味着它们的平衡方式不同,这宁愿暗示您不能将每个 AVL 树着色为有效的 RB 树。

    【讨论】:

    • 这是不正确的。唯一的实质区别是 AVL 树的平衡更加严格,没有一颗树可以“太平衡”而不能成为红黑树。
    • 不可能有一个AVL树,如果你给它上色,它会处于对RB树无效的状态吗?这是我的担心。
    • user82238:我认为图形菜鸟是对的。如果您为 AVL 树着色,您只需放置黑色节点,以便黑色路径计数在任何地方都相同,而 AVL 的出色平衡将为您提供帮助。如果您无法完全获得相同的黑色路径计数,则将奇数红色节点放置为“填充”。假设从根到叶的最短 AVL 路径为 9,偶尔为 10。然后将黑色路径计数为 9,在 10 条路径上,使叶节点变为红色。反之亦然。有红黑树不能是 AVL 树
    【解决方案4】:

    答案是肯定的,每棵 AVL 树都可以着色为红黑,反之则不成立。

    我还没有完全弄清楚该怎么做,我也在寻找证据。

    【讨论】:

    • 雨果 - 看看我上面说的。
    猜你喜欢
    • 2012-11-30
    • 2021-03-02
    • 2013-04-21
    • 2015-03-06
    • 2016-03-18
    • 2019-07-09
    • 2012-11-21
    • 2012-11-22
    • 2012-08-20
    相关资源
    最近更新 更多