【发布时间】:2011-04-23 08:21:15
【问题描述】:
我下周要参加算法考试,并被要求准备考试。其中一个问题让我很困惑。
“我们可以画一棵有7个黑色节点和10个红色节点的红黑树吗?为什么?”
听起来可以很快回答,但我想不通。
CRLS 为我们提供了具有 n 个内部节点的 RB 树的最大高度:2*lg(n+1)。
我认为这个问题可以单独使用这个引理来解决,但我不确定。
有什么建议吗?
【问题讨论】:
标签: algorithm binary-tree red-black-tree
我下周要参加算法考试,并被要求准备考试。其中一个问题让我很困惑。
“我们可以画一棵有7个黑色节点和10个红色节点的红黑树吗?为什么?”
听起来可以很快回答,但我想不通。
CRLS 为我们提供了具有 n 个内部节点的 RB 树的最大高度:2*lg(n+1)。
我认为这个问题可以单独使用这个引理来解决,但我不确定。
有什么建议吗?
【问题讨论】:
标签: algorithm binary-tree red-black-tree
答案很简单。
正如我们所知,红色节点只能有黑色父节点。最大节点数。节点数将是每个黑色节点的两个子节点都是红色的,因此每个黑色节点都有红色的父节点。因此,对于“n”个黑色节点,“2n”个红色节点是可能的。
这样想:
希望这能帮助您形象化解决方案。
【讨论】:
答案主要取决于您的 RB 树是否在叶子上使用黑色虚拟节点,如果是,它们将包含在七个黑色节点的计数中。如果不是,请考虑一棵由七个黑色节点组成的完整树
*
/ \
* *
/\ /\
* * * *
添加十个红色节点不会有太多麻烦。
【讨论】:
由于这是考试准备,我不想给你一个直接的答案,但我认为你需要考虑的是控制你如何构建红黑树的属性:
(从维基百科页面窃取这些:http://en.wikipedia.org/wiki/Red-black_tree)
鉴于您列出的节点数,您能满足所有这些属性吗?
【讨论】: