1
を使用して、バイナリツリーの左葉の合計を取得します。I次のコードを持っていますが、このコードでは問題があるように思われる:私は上記のコードを使用して9
得るが、入力[3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
については再帰
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);
}
答えは12
、つまり9 + 3
になります。
このコードには何が欠けていますか?
入力配列は、親が位置i
にあり、その左の子が2 * i + 1
にあり、右の子が2 * i + 2
にあるバイナリツリーを表します。
をこれは、ルート値と思われますsumOfLeftLeaves()には追加されません。 – nakano531
どのように木を築いていますか?期待される合計が正しくないと思われ、少なくとも1つのノードが孤児であるように見える入力データに異常がある可能性があります(位置7の「2」は位置3に親「ヌル」を持ちます)。 – mhawke