FrazeColder
Lt. Commander
- Registriert
- Okt. 2013
- Beiträge
- 1.721
Guten Tag Community,
Ich habe da zwei Fragen zu meiner Aufgabe.
Ich finde leider nicht den Fehler, warum jeweils der Komplette Baum zerstört wird...
Beziehungsweise 'N'/'A' werden an die Stelle von 'M' gesetzt. Und da 'N' sowie 'A' ja keinen Nachfolger haben, wird der Baum komplett auf 'N' oder halt 'A' reduziert.
Die suchen, sowie auch die einfügen Methode funktioniert!
Hier mal der Baum:
Ich weiß, wenn ich jetzt beispielsweise T entferne, muss ich N an die Stelle von T packen.
Sollte N noch einen rechts Blatt besitzen, so muss ich S an die Stelle von N packen und dann N an die Stelle von T.
Wollte ich A löschen, so kann ich einfach den Linken Nachfolger von B auf 'null' setzten.
Doch wie geht das, bzw. wo liegt mein Fehler...
Ich müss das ganze Rekursiv implementieren. Daher weiß ich auch nicht so ganz, wie ich dann immer an den Vorgänger kommen soll...
Wir haben als Attribut in Klasse Baum 'löschenPosition' und 'wurzel'.
Hier mal meine entfernen Methode:
Meine zweite Frage ist noch, wie kann ich auf der Konsole so einen Baum, wie ich oben manuell geschrieben habe, ausgeben lassen?
MfG und Danke!
Ich habe da zwei Fragen zu meiner Aufgabe.
Ich finde leider nicht den Fehler, warum jeweils der Komplette Baum zerstört wird...
Beziehungsweise 'N'/'A' werden an die Stelle von 'M' gesetzt. Und da 'N' sowie 'A' ja keinen Nachfolger haben, wird der Baum komplett auf 'N' oder halt 'A' reduziert.
Die suchen, sowie auch die einfügen Methode funktioniert!
Hier mal der Baum:
Code:
M
/ \
D T
/ \ / \
B E R W
/ / \ \
A N S X
Ich weiß, wenn ich jetzt beispielsweise T entferne, muss ich N an die Stelle von T packen.
Sollte N noch einen rechts Blatt besitzen, so muss ich S an die Stelle von N packen und dann N an die Stelle von T.
Wollte ich A löschen, so kann ich einfach den Linken Nachfolger von B auf 'null' setzten.
Doch wie geht das, bzw. wo liegt mein Fehler...
Ich müss das ganze Rekursiv implementieren. Daher weiß ich auch nicht so ganz, wie ich dann immer an den Vorgänger kommen soll...
Wir haben als Attribut in Klasse Baum 'löschenPosition' und 'wurzel'.
Hier mal meine entfernen Methode:
Code:
public void entfernen(char schluessel) {
entfernenAusKnoten(schluessel, wurzel);
}
private Knoten entfernenAusKnoten(char schluessel, Knoten knoten){
if(knoten.getSchluessel() < schluessel){ //RECHTS
if(knoten.getSchluessel() == schluessel && knoten.getLinkerKnoten() == null && knoten.getRechterKnoten() == null){
Knoten vorgeanger_rechterKnoten = wurzel.getRechterKnoten();
Knoten vorgeanger_linkerKnoten = wurzel.getLinkerKnoten();
setWurzel(knoten);
wurzel.setLinkerKnoten(vorgeanger_linkerKnoten);
wurzel.setRechterKnoten(vorgeanger_rechterKnoten);
return new Knoten(schluessel);
}
else if(knoten.getSchluessel() == schluessel && knoten.getLinkerKnoten() != null && knoten.getRechterKnoten() == null){
Knoten vorgeanger_linkerKnoten = wurzel.getLinkerKnoten();
loeschePosition = knoten;
setWurzel(knoten);
knoten = vorgeanger_linkerKnoten;
return new Knoten(schluessel);
}else{
entfernenAusKnoten(schluessel, knoten.getRechterKnoten());
}
// -------------------------------------------------------------------------------------------------------------
}else{ //LINKS
if(knoten.getSchluessel() == schluessel && knoten.getLinkerKnoten() == null && knoten.getRechterKnoten() == null){
Knoten vorgeanger_rechterKnoten = wurzel.getRechterKnoten();
Knoten vorgeanger_linkerKnoten = wurzel.getLinkerKnoten();
setWurzel(knoten);
wurzel.setLinkerKnoten(vorgeanger_linkerKnoten);
wurzel.setRechterKnoten(vorgeanger_rechterKnoten);
return new Knoten(schluessel);
}
else if(knoten.getSchluessel() == schluessel && knoten.getLinkerKnoten() == null && knoten.getRechterKnoten() != null){
Knoten vorgeanger_rechterKnoten = wurzel.getRechterKnoten();
loeschePosition = knoten;
setWurzel(knoten);
knoten = vorgeanger_rechterKnoten;
return new Knoten(schluessel);
}else{
entfernenAusKnoten(schluessel, knoten.getLinkerKnoten());
}
}
return null;
}
Meine zweite Frage ist noch, wie kann ich auf der Konsole so einen Baum, wie ich oben manuell geschrieben habe, ausgeben lassen?
MfG und Danke!
Zuletzt bearbeitet: