説明: 指定された二分木について
+---+
| 9 |
+---+
/ \
+---+ +---+
| 7 | | 6 |
+---+ +---+
/ \ \
+---+ +---+ +---+
| 3 | | 2 | | 4 |
+---+ +---+ +---+
/ \
+---+ +---+
| 5 | | 2 |
+---+ +---+
合計は次のように計算されます。
1 * 9 + 2 * (7 + 6) + 3 * (3 + 2 + 4) + 4 * (5 + 2) = 90
これを解決するための私のアプローチは、各ノードのレベルを見つけてノードのキーで乗算し、左右のサブツリーのすべてのノードに対して再帰的に行うことです。
int weightedSumAtAllLevels(BTNode node) {
if (node != null)
return levelSumOfLeftSubTree(node.getLeftChild())
+ levelSumOfRightSubTree(node.getRightChild())
+ node.getKey();
else
return 0;
}
int levelSumOfLeftSubTree(BTNode tmp) {
if (tmp == null) {
return 0;
} else {
int level = levelOfNode(tmp);
return level * tmp.getKey()
+ levelSumOfLeftSubTree(tmp.getLeftChild());
}
}
int levelSumOfRightSubTree(BTNode tmp) {
if (tmp == null) {
return 0;
} else {
int level = levelOfNode(tmp);
return level * tmp.getKey()
+ levelSumOfRightSubTree(tmp.getRightChild());
}
}
int levelOfNode(BTNode node) {
if (node == null)
return 0;
else
return 1 + levelOfNode(node.getParent());
}
うまくいかないようです。このソリューションに欠陥があることはわかっていますが、修正できません。何か助けはありますか?提案?