【问题标题】:why this binary search tree can't be a red black tree?为什么这棵二叉搜索树不能是红黑树?
【发布时间】:2018-12-20 05:21:12
【问题描述】:

我有一个问题要求解释为什么这棵平衡树不能是红黑树,并且还想仅使用一次旋转将其转换为红黑树:

为什么这棵二叉搜索树不能是红黑树?

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    在红黑树中,通过叶子的每条路径都有相同数量的黑色节点,并且至少路径上的每个第二个节点都是黑色的,因为红色节点不能有红色子节点。因此,树中到叶子的最长路径(红色节点最多的那个)最多是到叶子的最短路径的两倍。

    17 -> 11 -> 3 -> 5-> 7

    节点数是 2 倍以上

    17 -> 19

    所以这不可能是一棵红黑树。

    如果你在根部向右旋转,那么树会更加平衡,并且可以着色为红黑树。

    【讨论】:

    • 你是对的。高度为 2 log n 的 BST 可以看到非常短的路径。例如,根的一个孩子可能是一片叶子。在这种情况下,您无法通过着色使其成为红黑树。
    • 我想不出一个简单/封闭的形式条件。不过,我可以想到一个 O(N log N) 算法来检查一棵树。如果您对此提出问题,我将对其进行描述。评论有点复杂。
    【解决方案2】:

    违反了red-black trees 的属性 5。

    从给定节点到其任何后代 NIL 节点的每条路径都包含相同数量的黑色节点。

    鉴于根是黑色的,7 末尾 nil 的路径相对于 19 末尾 nil 的路径是不平衡的。19 有 1 个黑色节点要遍历; 7 大约有 3 个。

    这棵树不能被认为是红黑树,因为它没有得到适当的平衡。

    【讨论】:

    • 首先感谢您的帮助,如何仅使用一次旋转将其修复为红黑树?
    • 你……不能。这违背了红黑树算法的目的。你不只是旋转树,它突然变得平衡了。您必须真正完成这些步骤并确保它平衡的。
    【解决方案3】:

    正如其他人所解释的那样

    17 和 19 都是黑色的,那么路径 17,11,3,5,7 打破了黑色高度。如果每个其他节点都是红-黑-红等,那么 17(黑色)、11(红色)、3(黑色)、5(红色)、7(黑色)将有 3 个黑色节点,其中路径 17,19 将有 2 个黑色节点。

    但假设 7 作为节点不存在。那么剩下的树可能是一棵红黑树:

    假设插入了 7。然后通过一些颜色翻转和大约 17 的右旋转,你得到

    【讨论】: