我正在尝试搜索给定红黑树中的所有从根到叶的路径。特别是,我想写一个测试,给定一个 rbt,将断言每条路径都有相同的黑色节点数。
我正在尝试使用两个全局变量进行类似的操作:
static int count = 0, path = -1;
int check_paths(tree_node t)
{
if (t == NULL)
{
if (path == -1)
path = count;
else
return (path == count);
return 1;
}
if (t->black == 1) ++count;
int x,y;
x = check_paths(t->left);
if (t->black == 1) --count;
y = check_paths(t->right);
return (x&&y);
}
但是,当左分支中的黑色节点右侧有红色节点时,我遇到了麻烦,因为这意味着计数减少的幅度超过了应有的幅度。
有没有更好的方法来搜索从根到叶的路径并计算特定值的频率,然后以某种方式比较计数?或者,如果给定一个,是否有一种完全不同的方法来测试 rbt 的余额(即它已经制作,但它的正确性不确定)?