【发布时间】:2015-07-21 11:07:33
【问题描述】:
在过去的一次考试中,我们曾经被要求通过观察树的形状来判断一棵树是否是红黑平衡的。我还没有找到任何关于如何做到这一点的信息,除了一个观点声称如果最长路径不超过最短路径的两倍,二叉树是红黑平衡的,但我很确定这是 null 的要求路径平衡树也是如此。那是对的吗?有什么方法可以判断一棵树的形状是否是红黑平衡的?
【问题讨论】:
标签: binary-tree
在过去的一次考试中,我们曾经被要求通过观察树的形状来判断一棵树是否是红黑平衡的。我还没有找到任何关于如何做到这一点的信息,除了一个观点声称如果最长路径不超过最短路径的两倍,二叉树是红黑平衡的,但我很确定这是 null 的要求路径平衡树也是如此。那是对的吗?有什么方法可以判断一棵树的形状是否是红黑平衡的?
【问题讨论】:
标签: binary-tree
要检查二叉树是否是红黑树平衡的,您应该验证每个子树的最大高度小于或等于最小高度的两倍
更多信息:
check given binary tree follows height property red black tree
【讨论】:
不要混淆。可能教授希望学生们了解红黑树的样子。
从维基百科,你有:
除了对二叉搜索树施加的要求之外,红黑树还必须满足以下要求:
- 节点不是红色就是黑色。
- 根是黑色的。
- 所有叶子 (NIL) 都是黑色的。(所有叶子都与根的颜色相同。)
- 每个红色节点必须有两个黑色子节点(因此它 必须有一个黑人父母)。
- 从给定节点到其任何后代 NIL 节点的每条路径 包含相同数量的黑色节点。
这些约束强化了红黑树的一个关键特性:从根到最远叶子的路径不超过从根到最近叶子的路径的两倍 em>。结果是树的高度大致平衡。由于诸如插入、删除和查找值之类的操作需要与树的高度成比例的最坏情况时间,因此这个高度的理论上限允许红黑树在最坏情况下是有效的,这与普通的二叉搜索树不同。
那么就有这个问题了:Colour a binary tree to be a red-black tree
还有这个:How to check the black-height of a node for all paths to its descendent leaves?,您可以在其中找到适合您问题的算法。
以这棵树为例:
如果测试有一个彩色树,那么您可以断言从 Wikipedia 给出的属性。如果树没有颜色,我认为是这种情况,然后拿我上面链接的树,把它写在一张纸上,然后运行链接问题中提供的算法。
【讨论】:
我不是大师,但这是来自 Cormen 的书Introduction to Algorithms:
红黑树是满足以下红黑性质的二叉树:
- 每个节点不是红色就是黑色。
- 根是黑色的。
- 每片叶子 (NIL) 都是黑色的。
- 如果一个节点是红色的,那么它的两个子节点都是黑色的。
- 对于每个节点,从节点到后代叶子的所有简单路径都包含相同数量的黑色节点。
【讨论】: