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