У меня есть следующий код, но там, кажется, проблема в этом коде:Получить сумму левых листьев бинарного дерева с помощью рекурсии
private boolean isLeaf(TreeNode node) {
if (node == null)
return false;
if (node.left == null && node.right == null)
return true;
return false;
}
public int sumOfLeftLeaves(TreeNode root) {
if (root == null)
return 0;
if (isLeaf(root.left))
return root.left.val;
return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}
Для входа [3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
я получаю 9
используя код выше, но ответ должен быть 12
т.е. 9 + 3
.
Что отсутствует в коде?
Входной массив представляет собой двоичное дерево, где если родитель находится в позиции i
, то его левый ребенок находится в 2 * i + 1
, а правый ребенок - 2 * i + 2
.
кажется корневое значение не добавляется в sumOfLeftLeaves(). – nakano531
Как вы строите дерево? Ваша ожидаемая сумма кажется неправильной, и тогда возможны возможные аномалии во входных данных, где хотя бы один узел кажется сиротой («2» в позиции 7 имеет родительский «нуль» в позиции 3). – mhawke