如何比较二叉树中的根路径和叶路径

时间:2012-09-22 18:34:46

标签: c recursion tree binary-tree

我正在尝试搜索给定红黑树中的所有根到叶路径。特别是,我想编写一个测试,给定一个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的余额,如果给定一个(即它已经制作但是它的正确性是不确定的)?

0 个答案:

没有答案