为什么新插入的节点在红黑树插入操作中始终为红色?

时间:2016-03-13 02:06:43

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

想知道为什么红黑树插入,我们先将新节点标记为红色,然后进行一些调整?为什么不将其标记为黑色并进行适当的调整?感谢。

我认为唯一的原因是,添加红色节点不会破坏黑色节点相关规则上的任何红黑树规则(例如,从根到叶的路径包含相同数量的黑色节点),这只需要调整任何违反红色规则的行为(即不能为父/子连续两个红色节点),这使得代码变得简单。我不认为添加黑色节点并调整黑色节点数量(在不同路径上)的违规是不可能的。简而言之,添加黑色以外的红色节点仅仅是为了简化代码,没有其他原因。如果我错了,请随时纠正我。

1 个答案:

答案 0 :(得分:3)

  1. 插入红色节点不太可能违反红黑规则 而不是插入一个黑色的。这是因为,如果新的红色节点是 附着在一个黑色的,没有规则被打破。它不会创建一个 有两个红色节点在一起破裂的情况 统治红色父母黑人孩子,并且它不改变黑色 任何路径中的高度(从根到叶的黑节点数)。
  2. 当然,如果您将新的红色节点附加到红色节点,则规则为 红色的父母 - 黑人儿童将受到侵犯。但是,运气好的话 这只会发生一半的时间。然而,如果你添加一个新的黑色 节点,它总是会改变其路径的黑色高度, 违反黑色高度规则。

  3. 此外,更容易修复违反红色黑人父母的问题 规则比黑色高度规则。

  4. 来源:Data Structures & Algorithms in Java Second Edition - Robert Lafore第437页。