所有黑色节点的树是红黑树吗?

时间:2011-06-20 03:50:17

标签: data-structures red-black-tree

似乎维基上的定义并不准确:

http://en.wikipedia.org/wiki/Red-black_tree#Properties

所有黑色节点的树是红黑树吗?

更新

由于rbtree的定义不是那么严格,我们如何决定是将黑节点的子节点打印为红色还是黑色?

7 个答案:

答案 0 :(得分:7)

,所有节点都是黑色的树可以是红黑树。树必须是一个完美的二叉树(所有叶子都在相同的深度或相同的水平,并且每个父亲都有两个孩子)因此,它是 Black的唯一树高度等于树高

答案 1 :(得分:6)

红黑树只是2-3-4 tree的二叉树表示。红黑树中的任何红色节点对应于类似2-3-4树中其父节点的一部分。例如:

           [black 5]
          /         \
      [red 3]     [black 6]
     /       \
[black 2] [black 4]

是2-3-4树的表示

    [3 | 5]
   /   |   \
 [2]  [4]  [6]

如果红黑树只有黑色节点,则表示它表示2-3-4树,只有2个节点(单个条目),而不是3个节点(例如{示例中为{1}}或4节点。请注意,这基本上只是一个普通的二叉搜索树。

答案 2 :(得分:3)

可能有一个具有所有黑色节点的正确的红黑树。通常,只有一个节点或只有叶子节点是根的直接子节点的RBTree将是所有后节点。

答案 3 :(得分:2)

要回答问题的第二部分,关于决定是将节点打印为红色还是黑色,该信息将存储在每个节点中。

在典型的二叉搜索树中,每个节点都包含一个值,一个左指针和一个右指针(可能还有一个父指针)。在红黑树中,每个节点包含所有那些的额外字段,指示此节点是红色还是黑色。然后,树上的各种操作(例如插入或删除)负责以一致的方式维护此颜色信息。

你永远不会得到一个没有颜色的树,并被告知为节点选择颜色(除了作为家庭作业或考试问题)。

答案 4 :(得分:1)

下面是一个示例,显示一棵红黑树的所有节点都是黑色的:

首先,将{1、2、3、4、5、6、7、8、9、10}依次插入红黑树中。 然后,从红黑树中按降序删除{10,9,8}。

最后,这棵红黑树的所有节点都是黑色的。

节点全为黑色的红黑树与节点全为一个键的B-树(m = 4)相同。

答案 5 :(得分:0)

是的,但对于具有所有红色节点的红黑树,情况也是如此。这样的树是无效的。哪些节点必须是黑色有限制。例如,叶节点必须是黑色,红色节点的子节点都必须是黑色。

答案 6 :(得分:0)

是的,所有黑色节点的树都可以是红黑树。 可以证明,这种树必须是一个完全填充的树,以保持相同的黑色深度属性。

你可以自己证明,所有黑色节点的树可以是一棵红黑树,通过构建这种小树。 例如:

                            2,black
                      1,black      3,black 

这棵树有所有黑色节点,它满足所有条件。假设root的父节点为nil,并且两个叶子节点都将它们的子节点都设为nil。希望这有帮助。