Java中二叉树的叶节点计数

Java中二叉树的叶节点计数,java,recursion,binary-tree,Java,Recursion,Binary Tree,我已经编写了下面的代码来查找二叉树中的叶节点数。我在Geeksforgeks上提交了它,它给出的结果是正确的答案,但我不确定他们是否检查了大量的测试用例。你能告诉我这是不是正确的解决办法吗 int sum=0; int countLeaves(Node node) { // Your code if(node==null) return sum; if(node.left!=null || node.right!=null) {

我已经编写了下面的代码来查找二叉树中的叶节点数。我在Geeksforgeks上提交了它,它给出的结果是正确的答案,但我不确定他们是否检查了大量的测试用例。你能告诉我这是不是正确的解决办法吗

int sum=0;
int countLeaves(Node node) 
{
     // Your code
     if(node==null)
     return sum;
     if(node.left!=null || node.right!=null)
     {
         sum=countLeaves(node.left);
         sum=countLeaves(node.right);
     }
     else
     {
         sum++;
     }
     return sum;

}

您的解决方案似乎确实产生了正确的结果,但它以一种尴尬的方式产生。将
countLeaves(node.left)
countLeaves(node.right)
分配给
sum
乍一看就像一个bug。再看一眼,它是完全没有必要的,因为
sum
已经包含了您分配给它的值

如果您使用外部变量(
sum
)来计算叶子数(这通常是个坏主意),那么将递归调用的结果分配给
sum
就没有意义了

你可以简单地写:

int sum=0;
int countLeaves(Node node) 
{
     if(node==null)
         return sum;
     if(node.left!=null || node.right!=null) {
         countLeaves(node.left);
         countLeaves(node.right);
     } else {
         sum++;
     }
     return sum;
}
您甚至可以将该方法更改为不返回任何内容,并在调用后从
sum
变量获取结果

但是,我建议避免使用
sum
变量,以使代码更清晰:

int countLeaves(Node node) 
{
    if (node==null)
        return 0;
    else if (node.left!=null || node.right!=null) {
        return countLeaves(node.left) + countLeaves(node.right);
    } else {
        return 1;
    }
}

我认为你应该用
&&
@Manhar替换
|
|
的比较是正确的。使用
&&
可以避免只使用一条路径计算分支…@Charliemops,啊,是的。同意:)