Hallo,
ich arbeite gerade an einem Binärbaum und die Löschfunktion macht mir ein wenig Kummer. Das kopieren der Knoten ist kein Problem, aber das eigentliche Löschen eines Knotens will nicht richtig funktionieren.
So sieht mein Baum in etwa aus. Die Idee ist jetzt, dass ich, wenn ich z.B. das Element 17 löschen will, den linken Subknoten von Knoten 17 kopiere und links an den Knoten anfüge. Soweit klappt das ganze auch noch (siehe Code unten). Das Problem liegt jetzt darin, dass ich den Knoten 17 jetzt löschen will und durch den Knoten 15 ersetzen will. Dazu müsste ich aber Eine Rekursion rückwärts durchführen und mein Verstand sagt mir, dass das nicht funktioniert. Deshalb stellt sich für mich die Frage, wie ich das am besten mache. Hat jemand dazu ne Idee?
ich arbeite gerade an einem Binärbaum und die Löschfunktion macht mir ein wenig Kummer. Das kopieren der Knoten ist kein Problem, aber das eigentliche Löschen eines Knotens will nicht richtig funktionieren.
So sieht mein Baum in etwa aus. Die Idee ist jetzt, dass ich, wenn ich z.B. das Element 17 löschen will, den linken Subknoten von Knoten 17 kopiere und links an den Knoten anfüge. Soweit klappt das ganze auch noch (siehe Code unten). Das Problem liegt jetzt darin, dass ich den Knoten 17 jetzt löschen will und durch den Knoten 15 ersetzen will. Dazu müsste ich aber Eine Rekursion rückwärts durchführen und mein Verstand sagt mir, dass das nicht funktioniert. Deshalb stellt sich für mich die Frage, wie ich das am besten mache. Hat jemand dazu ne Idee?
Code:
--------------------------[33]
|
----[17]-----
| |
-[15] --[21]------
| | |
[12] [18] [29]
Code:
public void delete(int value) {
BinaryTree temp = null;
if (content != null) {
if (value < content) {
left.delete(value);
} else if (value > content) {
right.delete(value);
} else if (value == content) {
temp = right;
right = null;
left.right = temp;
}
}
}
Zuletzt bearbeitet: