【问题标题】:Count leaf nodes in binary tree in Java在Java中计算二叉树中的叶节点
【发布时间】:2019-05-12 11:22:44
【问题描述】:

我编写了以下代码来查找二叉树中叶节点的数量。我在 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;

}

【问题讨论】:

  • 我认为您应该将|| 替换为&&
  • @Manhar 与|| 的比较是正确的。使用&&,您可以避免只计算其中一条路径的分支...
  • @Charliemops,是的。同意:)

标签: java recursion binary-tree


【解决方案1】:

您的解决方案似乎确实产生了正确的结果,但这样做的方式很尴尬。将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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多