Ваше решение, кажется, дает правильный результат, но оно делает это неловким способом.Присвоение 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;
}
}