Подсчет листовых узлов в двоичном дереве в Java - PullRequest
0 голосов
/ 11 декабря 2018

Я написал приведенный ниже код для определения количества листовых узлов в двоичном дереве.Я отправил его на 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;

}

1 Ответ

0 голосов
/ 11 декабря 2018

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