【发布时间】:2019-03-22 17:13:50
【问题描述】:
我目前正在为以下问题绞尽脑汁: 证明,在红黑树 T 中,如果从根到叶的每条路径都包含 至少有一个红色节点,那么我们可以在 T 中选择一组红色节点来着色黑色,使得 T 仍然是一个有效的红黑树,并且黑色高度增加一。
任何人都有关于如何解决这个问题的任何提示,我什至开始迷路
【问题讨论】:
标签: data-structures binary-tree red-black-tree
我目前正在为以下问题绞尽脑汁: 证明,在红黑树 T 中,如果从根到叶的每条路径都包含 至少有一个红色节点,那么我们可以在 T 中选择一组红色节点来着色黑色,使得 T 仍然是一个有效的红黑树,并且黑色高度增加一。
任何人都有关于如何解决这个问题的任何提示,我什至开始迷路
【问题讨论】:
标签: data-structures binary-tree red-black-tree
想到它的简单方法是将红色节点向上推一棵树,然后再次将根变为黑色。
想象一棵树,如下所示:
B
R B
B B R B
B B B B B B R R
如果每条路径上都有一个红色节点,那么将至少有一个黑色节点和两个红色子节点。如果您在发生这种情况的每个位置将红色节点向上推,从底部开始最终您会将红色节点推到树根,此时您可以翻转颜色并且树高增加一。
此外,如果您的配置是整个级别为红色,则该级别的所有节点都可以翻转,而无需更改树属性,并且高度再次增加了 1。
如果某些路径有多个红色节点,那就有点棘手了,在这种情况下,您需要从该路径中最顶部的红色节点开始工作,并从另一个分支推送一个红色节点以匹配它。
【讨论】: