- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何递归检查给定的红黑树是否遵守“从节点到空链接的每条路径必须包含相同数量的黑节点”的规则。我正在使用这种结构:
enum color = {RED, BLACK};
typedef struct node {
int value;
struct node* left;
struct node* right;
color c;
} node;
我已经尝试使用这个原型(prototype)来实现一个算法:
bool isRBT(struct node* tree, int numberBlackNodesLeft, int numberBlackNodesRight)
但是,我无法递归地计算这些数字。因为,该规则规定来自一个节点的每条路径都必须遵守该规则。这对我来说有些难以实现。
有什么好主意吗?
提前致谢!
最佳答案
这里有一个简单的方法:
// Returns the number of black nodes in a subtree of the given node
// or -1 if it is not a red black tree.
int computeBlackHeight(node* currNode) {
// For an empty subtree the answer is obvious
if (currNode == NULL)
return 0;
// Computes the height for the left and right child recursively
int leftHeight = computeBlackHeight(currNode->left);
int rightHeight = computeBlackHeight(currNode->right);
int add = currNode->color == BLACK ? 1 : 0;
// The current subtree is not a red black tree if and only if
// one or more of current node's children is a root of an invalid tree
// or they contain different number of black nodes on a path to a null node.
if (leftHeight == -1 || rightHeight == -1 || leftHeight != rightHeight)
return -1;
else
return leftHeight + add;
}
要测试一棵树是否满足红黑树的black-height属性,可以把上面的函数包装成:
bool isRBTreeBlackHeightValid(node* root)
{
return computeBlackHeight(root) != -1;
}
关于c++ - 检查一棵树是否满足红黑树的black-height属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731072/
我正在尝试学习 React.JS,但有些事情让我大吃一惊。 我有这个标题组件: class Header extends Component { render() { return ;
我正在尝试学习 React.JS,但有些事情让我大吃一惊。 我有这个标题组件: class Header extends Component { render() { return ;
我有一个 Cordova iPhone 应用程序,它使用状态栏插件。状态栏的背景设置为黑色,而文本曾经是白色。但是自从插件从0.1.3版本升级到0.1.8之后,文字变成了黑色。 是否可以恢复旧行为,或
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Difference between Color.red and Color.RED 我看到 Java 类
基于poetry docs : Likewise if you have command line tools such as pytest or black youcan run them usin
我正在使用 Shadowbox.js example code显示带有消息“此站点仍在 build 中!”的阴影框在页面加载时: Shadowbox.init({ // let's sk
我注意到 eclipse 有一个奇怪的行为? 我有一个静态变量: public static colorID = R.color.Black; 有时它与 R.color.Black 匹配: if(co
我正在尝试通过运行Windows 7的笔记本电脑通过腻子将SSH连接到Beaglebone Black。 打开BBB的电源并在Windows上安装所需的BBB驱动程序后,我可以在Chrome浏览器中浏
我正在尝试评估颜色选择器选择的颜色的暗度,看它是否“太黑”,如果是,则将其设置为白色。我想我可以使用十六进制值的第一个字符来实现这一点。它在工作,但它也在切换一些合法的“浅色”颜色。 我有以下代码:
我无法弄清楚为什么下面的代码中有一个黑色矩形,据我所知,隐藏选项留下了一些东西,但我不知道如何隐藏它或更改它颜色。 这是什么以及我们如何操纵它? Select flow slides
我昨天买了 beaglebone black 并尝试使用 USB 连接它。正如我所读到的那样,它预装了运行在 192.168.7.2 的 Linux Distro,我们可以使用 ssh 访问它。但我无
我们目前正在为 BeagleBone Black 开发一个应用程序(使用标准的 Angstrom 发行版)。它在 GDB(由 Netbeans 远程控制)下运行了一段时间(5-10 分钟),但在某个相
Arial Black网路安全吗? 我已经读过它,但是当我将其放入字体声明中时,就得到了Times New Roman的支持。 有人知道为什么吗? 最佳答案 根据代码样式字体调查(实际上可能是最好的估
假设你有一个 red-black tree这是一个有效的 binary search tree并且不违反任何这些规则: 节点是红色或黑色。 根是黑色的。 所有叶子 (NIL) 都是黑色的。 每个红色节
我想在 Jenkins 共享库中实现黑色扫描仪。这个想法是,当库看到 pyproject.toml 时,它将执行黑色检查。该命令设置为 black --check ./ 。这将为所有项目设置一次,因此
我想在 3D 绘画工具上构建撤消/重做功能。每次绘制后我将纹理存储在一个数组中,如下所示: var image3 = mesh.material.map.image;
所以我有一个红黑树如下: 2 = Root Black Children = 1 (Black/Left), 4 (Red/Right) Children of 1 = NIL & NIL => He
我不太确定如何解决。所以我正在编程 blackJack 并且我有我的函数声明(如图所示),对于我的 add_card_to_hand 函数,我不知道该怎么做。我有 2 个参数,一手牌是我通过引用传递的
这个问题在这里已经有了答案: Disable Visual Studio 2015 extra debug option (5 个答案) 关闭 6 年前。 因此,每当我尝试在 Visual Stud
自动视差 AndEngine给出黑屏。 public class MainActivity extends SimpleBaseGameActivity { static final int
我是一名优秀的程序员,十分优秀!