これは私のコードが何をする必要があるかの写真です。
通話前:
+----+
| -9 |
+----+
/ \
/ \
+----+ +----+
| 3 | | 15 |
+----+ +----+
/ / \
/ / \
+----+ +----+ +----+
| 0 | | 12 | | 24 |
+----+ +----+ +----+
/ \
/ \
+----+ +----+
| 6 | | -3 |
+----+ +----+
通話後:
+----+
| -9 |
+----+
/ \
/ \
+----+ +----+
| 6 | | 30 |
+----+ +----+
/ / \
/ / \
+----+ +----+ +----+
| 0 | | 24 | | 48 |
+----+ +----+ +----+
/ \
/ \
+----+ +----+
| 12 | | -3 |
+----+ +----+
基本的に、この問題では、整数のバイナリ ツリーで 0 より大きいすべてのデータ値を 2 倍にする必要があります。以下の私のコードは、いくつかの値に対してこれを行いますが、早期に停止します。これを再帰的に修正する方法がわかりません。これは、上記のツリーの出力がどのように見えるかです。
overallRoot
_[-9]_______________
/ \
_[6] _____[30]
/ / \
[0] _[12] [24]
/ \
[6] [-3]
public void doublePositives() {
doublePositives(overallRoot);
}
private IntTreeNode doublePositives(IntTreeNode root) {
if (root != null) {
if (root.data > 0) {
root.data = 2 * root.data;
} else {
root.left = doublePositives(root.left);
root.right = doublePositives(root.right);
}
}
return root;
}