私は以前に非常によく似た質問をしましたが、もっと詳細に言及する必要がありました。前回はPHPで「二分木で与えられた深さのノードの値の合計を見つける方法」でした。
sum(Node, Level) =
if (Level == 0) return Node.value;
else return f(Node.left, Level-1) +
f(Node.right, Level-1).
だから今、私はこれをJavaで書こうとしました。そして、JavaはnullPointerExceptionをスローします。その理由は、ツリーが完全でない場合、以下のコードは処理しないためです。
public int getNodeValueByDepth(Node n, int level) {
if(level == 0) {
return n.data;
}
else {
return getNodeValueByDepth(n.left, level-1) +
getNodeValueByDepth(n.right, level-1);
}
}
私のテストツリー構造は次のとおりです。
/*
* construct tree
* sum of node's value
* 5 depth 0 ==> 5
* / \
* 3 10 depth 1 ==> 13
* / \ / \
* 2 4 6 11 depth 2 ==> 23
* / \
* 7 9 depth 3 ==> 16
*
* depth 4 ==> null
*
*/
したがって、7 + 9であるgetNodeValueByDepth(root、3)を呼び出すと、nullポインター例外エラーがスローされます。ノードの左右がnullの場合を処理するロジックを追加しようとしましたが、それでも方法がわからず、これを解決しないとスリープできません。
誰かが私にヒントを与えることができますか?試しましたが、0が返されるだけではありません。
public int getNodeValueByDepth(Node n, int level) {
int sum = 0;
if(level == 0) {
return sum + n.data;
}
else if(n.left != null) {
return sum += getNodeValueByDepth(n.left, level-1);
}
else if(n.right != null) {
return sum += getNodeValueByDepth(n.right, level-1);
}
else {
return sum + 0;
}
}