我正在尝试搜索给定红黑树中的所有根到叶路径。特别是,我想编写一个测试,给定一个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);
}
然而,当左侧分支中黑色节点右侧有红色节点时,我遇到了问题,因为这意味着计数减少的次数超过应有的数量。
有没有更好的方法来搜索root-to-leaf路径并计算特定值的频率,然后以某种方式比较计数?或者,是否有一种完全不同的方法来测试一个rbt的余额,如果给定一个(即它已经制作但是它的正确性是不确定的)?