вот небольшая проблема из следующей головоломки Java (http://code-exercises.com/programming/medium/28/strict-binary-tree-check). Задача состоит в том, чтобы написать метод, который проверяет, есть ли в данном двоичном дереве все узлы либо 0, либо 2 дочерних узла.Рекурсивная проверка двоичного дерева в Java
Их решение заключается в следующем
public Boolean isStrictTree(TreeNode node) {
if (node == null) {return true;}
if ((node.left() == null && node.right() != null) || (node.left() != null && node.right() == null)) {return false;}
return isStrictTree(node.left()) && isStrictTree(node.right());
}
я придумал что-то подобное, но он не работает. Разница в том,
а) первая линия - обработка нулевой случай (возвращает «нулевой» вместо «истина»)
б) структура рекурсии - шахта-то перемешались вместе (таким образом, который должен работайте, если я прослежу его, что происходит с бумагой), в отличие от решения, распространяющего его по двум строкам - условного и возвращаемого.
public Boolean isStrictTree(TreeNode node) {
if (node == null) {return null;}
else if ((isStrictTree(node.left()) == true) && (isStrictTree(node.right())==null)) {return false;}
return true;
}
Сценарий запускается, но ничего не возвращает. Мне было бы очень интересно понять, ПОЧЕМУ он не работает, кажется, что я кое-что могу узнать здесь, поэтому любое понимание прокомментировано.
Просьба предоставить весь MCVE. Добавьте основную программу, которая приведет к возникновению проблемы. Мне любопытно, как процедура с определенным типом возвращаемого значения и значением «ничего не возвращает». Семантически это должно быть невозможно. – Prune