Java中二叉树的叶节点计数
我已经编写了下面的代码来查找二叉树中的叶节点数。我在Geeksforgeks上提交了它,它给出的结果是正确的答案,但我不确定他们是否检查了大量的测试用例。你能告诉我这是不是正确的解决办法吗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) {
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,啊,是的。同意:)