用于计算红黑树中有多少红色节点的Java程序

时间:2016-10-22 23:59:39

标签: java counting red-black-tree

我正在构建一个程序来确定红黑树中有多少个红色节点。我已经实现了一个RED BLACK BST,它在读取文本输入后构建树。我一直坚持如何计算红色节点的数量?我知道红色节点只能左倾,红色父节点不能有红色子节点。攻击这个问题的适当方法是什么?

1 个答案:

答案 0 :(得分:0)

递归解决方案如下所示:

public static int countRed(Node node) {
    int nbRed = 0;
    if (node == null) {
        return 0;
    }
    nbRed += countRed(node.left);
    nbRed += countRed(node.right);

    if(node.isRed()){
        nbRed++;
    }
    return nbRed;
}

测试

我用一个简单的循环测试了你的代码:

RedBlackBST tree = new RedBlackBST();
tree.root = tree.put(null, 0, 0);

for (int i = 1; i < 10; i++) {
    tree.root = tree.put(tree.root, i, i);
}
int redTotal = tree.countRed(tree.root);

这将返回总共3个红色。如果我在调试中检查它,它是准确的。 如果您认为该值无效,那么您应该在调试中检查您的树并确定结构中无效的值。