Hallo,
ich probiere eine Aufgabe zum Löschen in einem geordneten Suchbaum.
Der Pseudocode war gegeben mit:
....
Wenn Datenknoten gefunden wird, ermittle Anzahl der Kindknoten.
Falls 0 ... Datenknoten durch Abschluss ersetzen
Falls 1 ...
Falls 2 ... Inhalt Datenknoten durch Inhalt des Minimums im rechten Teilbaum ersetzen ...
Ich habe folgendes probiert:
Wenn ich z.B. einen Knoten zum Löschen eingebe, der keine Kinder hat, kommt "Fehler! Mitglied nicht gefunden". Der Knoten wird irgendwie nicht gefunden.
Auch wenn zwei Kindknoten sind, funktioniert das noch nicht.
Kann mir einer einen Hinweis geben? Danke...
ich probiere eine Aufgabe zum Löschen in einem geordneten Suchbaum.
Der Pseudocode war gegeben mit:
....
Wenn Datenknoten gefunden wird, ermittle Anzahl der Kindknoten.
Falls 0 ... Datenknoten durch Abschluss ersetzen
Falls 1 ...
Falls 2 ... Inhalt Datenknoten durch Inhalt des Minimums im rechten Teilbaum ersetzen ...
Ich habe folgendes probiert:
Java:
public class Abschluss extends Baumelement{
public void naechsterLinksSetzen(Baumelement bel){
}
public void naechsterRechtsSetzen(Baumelement ber){
}
public Baumelement naechsterLinksGeben(){
System.out.println("Kein linker Nachfolger bekannt!");
return this;
}
public Baumelement naechsterRechtsGeben(){
System.out.println("Kein rechter Nachfolger bekannt!");
return this;
}
public Datenelement inhaltGeben(){
return null;
}
public Datenelement inhaltSuchen(Datenelement suchinhalt){
return null;
}
public Baumelement entfernen(Datenelement suchinhalt){
System.out.println("Fehler: Das Mitglied wurde nicht gefunden.");
return this;
}
public Datenknoten minimumGeben(Datenknoten vaterknoten){
return vaterknoten;
}
}
public class Datenknoten extends Baumelement{
private Baumelement naechsterLinks, naechsterRechts;
private Datenelement inhalt;
public void naechsterLinksSetzen(Baumelement bel){
naechsterLinks = bel;
}
public void naechsterRechtsSetzen(Baumelement ber){
naechsterRechts = ber;
}
public Baumelement naechsterLinksGeben(){
return naechsterLinks;
}
public Baumelement naechsterRechtsGeben(){
return naechsterRechts;
}
public Datenelement inhaltGeben(){
return inhalt;
}
public Datenelement inhaltSuchen(Datenelement suchinhalt){
if(inhalt.istGleich(suchinhalt)){
return inhalt;
}
else if(inhalt.istKleiner(suchinhalt)){
return naechsterRechts.inhaltSuchen(suchinhalt);
}
else{
return naechsterLinks.inhaltSuchen(suchinhalt);
}
}
public Baumelement entfernen(Datenelement suchinhalt){
if(inhalt.istGleich(suchinhalt)){
if((naechsterLinks == null) && (naechsterRechts == null)){ // keine Kindknoten
return null;
}
else if(naechsterLinks == null){ // ein rechter Kindknoten
return naechsterRechts = naechsterRechts.naechsterRechtsGeben();
}
else if(naechsterRechts == null){ // ein linker Kindknoten
return naechsterLinks = naechsterLinks.naechsterLinksGeben();
}
else{ // zwei Kindknoten
Datenknoten dk = minimumGeben(this);
naechsterRechts.entfernen(dk.inhaltGeben());
}
}
else if(inhalt.istKleiner(suchinhalt)){
naechsterRechts = naechsterRechts.entfernen(suchinhalt);
}
else{
naechsterLinks = naechsterLinks.entfernen(suchinhalt);
}
return this;
}
public Datenknoten minimumGeben(Datenknoten vaterknoten){
return naechsterLinks.minimumGeben(this);
}
}
Wenn ich z.B. einen Knoten zum Löschen eingebe, der keine Kinder hat, kommt "Fehler! Mitglied nicht gefunden". Der Knoten wird irgendwie nicht gefunden.
Auch wenn zwei Kindknoten sind, funktioniert das noch nicht.
Kann mir einer einen Hinweis geben? Danke...