Oto zdjęcie tego, co mój kod musi zrobić.Rekurencyjne drzewo wyszukiwania binarnego x = zmień (x)
Before Call:
+----+
| -9 |
+----+
/ \
/ \
+----+ +----+
| 3 | | 15 |
+----+ +----+
/ / \
/ / \
+----+ +----+ +----+
| 0 | | 12 | | 24 |
+----+ +----+ +----+
/ \
/ \
+----+ +----+
| 6 | | -3 |
+----+ +----+
After Call:
+----+
| -9 |
+----+
/ \
/ \
+----+ +----+
| 6 | | 30 |
+----+ +----+
/ / \
/ / \
+----+ +----+ +----+
| 0 | | 24 | | 48 |
+----+ +----+ +----+
/ \
/ \
+----+ +----+
| 12 | | -3 |
+----+ +----+
Zasadniczo ten problem wymaga podwojenia wszystkich wartości danych większych niż 0 w drzewie binarnym liczb całkowitych. Mój kod poniżej robi to dla kilku wartości, ale zatrzymuje się wcześniej. Nie jestem pewien, jak to naprawić rekursywnie. Tak wygląda moje wyjście dla drzewa podanego powyżej.
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;
}
+1 za schemat! – arynaq