在Java中计算二叉树中的节点数

在Java中计算二叉树中的节点数,java,recursion,binary-tree,Java,Recursion,Binary Tree,我们只需要完成计算二叉树中节点数的函数“size”。我已经写了上面的代码。对于某些测试用例,它给出了错误的答案。请解释上述代码中的错误。从子节点获取数据时,您没有正确设置总和 static int sum=0; public static int size(TreeNode root){ if(root==null) return sum; sum++; sum=size(root.left); sum=si

我们只需要完成计算二叉树中节点数的函数“size”。我已经写了上面的代码。对于某些测试用例,它给出了错误的答案。请解释上述代码中的错误。

从子节点获取数据时,您没有正确设置
总和

static int sum=0;
    public static int size(TreeNode root){
        if(root==null)
        return sum;
        sum++;
        sum=size(root.left);
        sum=size(root.right);
        return sum;
    }
我建议您不要使用全局静态变量来获取递归的值

    sum += size(root.left);
    sum += size(root.right);
在这里:

您正在计算两个和,然后扔掉第一个

您可以改为:
返回大小(root.left)+size(root.right)+1


这里使用静态字段
也没有意义。如果有的话,那应该是递归方法中的一个局部变量!分别:简单地
返回0
表示null,否则使用我在这里提供的返回。首先,无需对该
变量进行计算

试试这样的方法:

sum=size(root.left);
sum=size(root.right);

@DawoodibnKareem你能给我更多的解释吗?是的,好的,现在你已经编辑好了,我想它可以工作了。有些地方仍然有点奇怪-将变量设置为0,然后立即递增-将变量设置为1似乎是一种奇怪的方式。但是我已经取消了我的否决票。@DawoodibnKareem谢谢,我认为全局变量会让事情变得更糟complicated@ManjotsinghChug你查过别人的吗answer@ManjotsinghChug这个解决方案是正确的。为什么你认为它给出了错误的答案?你给出了什么样的输入,你期望得到什么样的答案,你实际得到了什么样的答案?你的意思是
返回大小(root.left)+大小(root.right)+1
@leonardkraemer谢谢你的输入!相应地更新了答案!如果任何人对该方法感兴趣
returnroot==null,该方法的一行代码?0:大小(左根)+大小(右根)+1
@nullpointer当然可以,但我尽量不让新手超过限制;-)我很感激你的迅速复出!
sum=size(root.left);
sum=size(root.right);
public static int size(final TreeNode node)
{
    if (null == node ) return 0;
    return 1 + size( node.left ) + size( node.right );
}