在Java中计算二叉树中的节点数
我们只需要完成计算二叉树中节点数的函数“size”。我已经写了上面的代码。对于某些测试用例,它给出了错误的答案。请解释上述代码中的错误。从子节点获取数据时,您没有正确设置在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
总和
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 );
}