Ich habe den folgenden Code, aber es scheint in diesem Code ein Thema zu sein:Erhalten Summe von linken Blätter eines binären Baum mit Rekursion
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);
}
Für die Eingabe [3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
ich 9
den oben stehenden Code verwenden, aber die Antwort sollte 12
dh 9 + 3
sein.
Was fehlt in diesem Code?
Das Eingabearray stellt einen Binärbaum dar, in dem sich ein Elternteil an der Position i
befindet, dann befindet sich sein linkes Kind unter 2 * i + 1
und das rechte Kind befindet sich unter 2 * i + 2
.
Es scheint Wurzelwert:
Ein Knoten ein Blatt auf der linken Seite, aber eine Filiale auf der rechten Seite haben könnte wird nicht in sumOfLeftLeaves() hinzugefügt. – nakano531
Wie baut man den Baum? Ihre erwartete Summe scheint falsch zu sein, und dann gibt es möglicherweise Anomalien in den Eingabedaten, wobei mindestens ein Knoten ein Waisenkind zu sein scheint (die "2" in Position 7 hat an Position 3 den Elternwert "null"). – mhawke