java - 计算Java中二叉树中的叶节点

标签 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;

}

最佳答案

您的解决方案似乎确实产生了正确的结果,但它以一种笨拙的方式产生了。将 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;
    }
}

关于java - 计算Java中二叉树中的叶节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724658/

相关文章:

在 C 中使用递归创建二叉树

java - 双数组添加中的 Double ArrayList

java - @Email 验证注释导致部署中出现 NullPointerException

java - 方法重复输出

java - 由于函数调用,ArrayList 无法添加元素

C++ 递归查找数组的最小值

java - 为什么该方法不起作用?

haskell - 修复 OCaml 中的数据类型

recursion - 方案尾递归/迭代

java - 查找树的最大宽度的算法,不使用节点结构