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

计算红黑树中有多少个红色节点的Java程序,java,counting,red-black-tree,Java,Counting,Red Black Tree,我正在构建一个程序来确定红黑树中有多少个红色节点。我已经实现了一个红黑BST,它在读取文本输入后构建树。我被困在如何计算红色节点的数量上了?我知道红色节点只能向左倾斜,红色父节点不能有红色子节点。解决此问题的合适方法是什么?递归解决方案如下所示: public static int countRed(Node node) { int nbRed = 0; if (node == null) { return 0; } nbRed += countR

我正在构建一个程序来确定红黑树中有多少个红色节点。我已经实现了一个红黑BST,它在读取文本输入后构建树。我被困在如何计算红色节点的数量上了?我知道红色节点只能向左倾斜,红色父节点不能有红色子节点。解决此问题的合适方法是什么?

递归解决方案如下所示:

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);
redblackst树=新的redblackst();
tree.root=tree.put(null,0,0);
对于(int i=1;i<10;i++){
tree.root=tree.put(tree.root,i,i);
}
int redTotal=tree.countRed(tree.root);
这将返回总共3个红色。如果我在调试中检查它,它是准确的。
如果您觉得该值无效,那么应该在调试中检查树,并确定结构中哪些无效

请分享你到目前为止的代码(构建树和计算节点)!我已经添加了我所拥有的,您可以将根节点传递给countRed方法,然后使用left&right节点递归地再次调用它(同时调用isRed)。你应该试试看@亚历克斯,我已经更新了代码!我现在得到一个空指针异常,但实际上现在我得到了这个错误:当我在主方法中运行非静态变量root时,不能从静态上下文引用它。谢谢!但是我仍然得到错误:当我在主方法中运行非静态变量root时,它不能从静态上下文中引用。。。当我将根节点更改为static时,它表示当我在主方法中运行非静态方法节点时,不能从静态上下文引用它?更改“tree.countRed(tree);”到“tree.countRed(tree.root);”以及“if(root.isRed(root))”到“if(isRed(root))”您的代码将从一点重构中受益。例如,“isRed”方法=>它应该/可能是Node中的一个方法,因此您可以调用“Node.isRed()”而不是“isRed(Node)”,谢谢您的帮助!它现在编译并运行,但是它没有正确地计算节点数,所以我想我会重新开始。其他方法的代码由教科书提供,所以你认为问题出在我的计数方法中吗?