【问题标题】:Why are newly inserted nodes are always colored red in red black tree insert operation?为什么在红黑树插入操作中新插入的节点总是被染成红色?
【发布时间】:2016-06-28 04:46:12
【问题描述】:

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

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

【问题讨论】:

  • 您对它的外观和后果有什么想法?就“研究态度”而言,您提出了一个很好的问题——但就 StackOverflow 而言,您所付出的努力比提问者通常需要的要少得多。我鼓励你尝试详细说明“做一些适当的调整”意味着什么,并提出一个假设,说明为什么这可能更好或更坏——你将通过这样做自学红黑树,你会得到这里有更多参与的回答者。
  • @DanielWagner,我认为唯一的原因是,添加一个红色节点不会破坏任何关于黑色相关规则的红黑树规则(例如,从根到叶的路径包含相同数量的黑色节点),只需要调整任何违反红色规则的地方(即父/子不能是连续的两个红色节点),这使得代码简单。我不认为添加黑色节点并调整黑色节点数量的违规行为是不可能的。我可能是错的,感谢您的建议。我也会用帖子更新我的想法。
  • @DanielWagner,感谢您的建议并为您的 cmets 投票。 :)

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


【解决方案1】:
  1. 插入红色节点不太可能违反红黑规则 而不是插入一个黑色的。这是因为,如果新的红色节点是 依附于一黑,无不破。它不会创建一个 有两个红色节点一起断开的情况 红父黑子规则,不改变黑子 任何路径中的高度(从根到叶的黑色节点数)。
  2. 当然,如果你将一个新的红色节点附加到一个红色节点上,规则 红父黑子会被侵犯。然而,运气好的话 这只会发生一半的时间。然而,如果你添加一个新的黑色 节点,它总是会改变其路径的黑色高度, 违反黑色高度规则。

  3. 此外,更容易修复红父黑子的违规行为 规则比黑色高度规则。

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

【讨论】:

  • 感谢 Yogesh,投票并将您的回复标记为答案。 :)
猜你喜欢
  • 2013-03-05
  • 2018-11-06
  • 2013-11-17
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 2013-02-28
  • 2020-07-25
相关资源
最近更新 更多