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

时间:2018-12-11 12:54:51

标签: java recursion binary-tree

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

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;

}

1 个答案:

答案 0 :(得分:3)

您的解决方案似乎确实产生了正确的结果,但是这样做却很尴尬。乍一看,将countLeaves(node.left)countLeaves(node.right)都分配给sum就像一个错误。乍一看,这是完全没有必要的,因为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;
    }
}