【问题标题】:Why aren't these two nodes black in a red-black tree?为什么这两个节点在红黑树中不是黑色的?
【发布时间】:2013-03-13 10:54:11
【问题描述】:

据我了解,在红黑树中,当我插入一个新节点时,当我在向下的途中遇到一个带有 2 个红色子节点的黑色节点时,我需要翻转颜色,即使父节点变为红色它的 2 个孩子是黑色的(根除外)。

我在*上看到了这张图片:

为什么 8 和 17 不是黑色的?

我还签入了来自 Lafore 的“Java 中的数据结构和算法”的applet;同样的,这些节点变黑了。

这棵红黑树有多个版本吗?

【问题讨论】:

  • 当您说“除了根目录” 时,会不会是在回答您自己的问题? 8 和 17 根的子节点。
  • 我的意思是当根在翻转时保持黑色

标签: java data-structures collections tree red-black-tree


【解决方案1】:

实际上很可能使这些节点变黑。可能有几种不同的方法来为树的节点着色,以使生成的树服从红/黑树的结构约束。例如,任何完美的二叉树都可以被着色为所有节点都是黑色的,或者可以让行在红色和黑色之间交替,等等。

在红/黑树中重新着色和旋转节点的特定规则并不是唯一可能的规则。他们只是碰巧正确有效地工作的人。原则上我们可以改变它们,使树以不同的方式着色和旋转,这可能会导致具有相同节点的树产生不同的颜色或形状。

希望这会有所帮助!

【讨论】: