Hallo,
folgendes Problem, ich habe einen BinärBaum erstellt, der Strings als Knoten besitzt.
Nun habe ich eine löschmethode geschrieben die aber nicht funktionieren will.
Ich hoffe ihr könnt mir ein wenig helfen.
die Knoten classe
Hier die einfuege und loesch methode
ich hoffe sehr dass ihr damit etwas anfangen könnt^^
mfg basha
folgendes Problem, ich habe einen BinärBaum erstellt, der Strings als Knoten besitzt.
Nun habe ich eine löschmethode geschrieben die aber nicht funktionieren will.
Ich hoffe ihr könnt mir ein wenig helfen.
die Knoten classe
Java:
class Knoten {
public String daten; // Datenelement
public Knoten links, rechts; // Zeiger auf Nachfolgeknoten
Knoten( String n ) {
daten = n;
links = null;
rechts = null;
}
}
Hier die einfuege und loesch methode
Java:
public class Baum {
public Knoten wurzel = null; // Baum ist leer
// Einfuegen eines Knotens
/**
*
* @param x der String das eingefügt werden soll.
*/
public void einfuegen(String x) {
if (wurzel == null) {
wurzel = new Knoten(x);
save_value(x);
} else {
einrek(wurzel, x);
save_value(x);
}
}
// Knoten Loeschen
public Knoten loeschen(String x) {
Knoten stamm = wurzel;
Knoten eltern = wurzel;
boolean istEsLinks = true;
if (wurzel == null) {
return null;
}
while (stamm.daten.compareToIgnoreCase(x) != 0) {
eltern = stamm;
if (stamm.daten.compareToIgnoreCase(x) > 0) {
istEsLinks = true;
stamm = stamm.links;
} else {
istEsLinks = false;
stamm = stamm.rechts;
}
if (stamm == null) {
return null;
}
if (stamm.links == null && stamm.rechts == null) {
if (stamm == wurzel) {
wurzel = null;
} else if (istEsLinks) {
eltern.links = null;
} else {
eltern.rechts = null;
}
} else if (stamm.rechts == null) {
if (stamm == wurzel) {
wurzel = stamm.links;
} else if (istEsLinks) {
eltern.links = stamm.links;
} else {
eltern.rechts = stamm.links;
}
} else if (stamm.links == null) {
if (stamm == wurzel) {
wurzel = stamm.rechts;
} else if (istEsLinks) {
eltern.links = stamm.rechts;
} else {
eltern.rechts = stamm.links;
}
} else {
Knoten ersetzen = knotenErsetzen(stamm);
if (stamm == wurzel) {
wurzel = ersetzen;
} else if (istEsLinks) {
eltern.links = ersetzen;
} else {
eltern.rechts = ersetzen;
ersetzen.links = stamm.links;
}
}
}
return stamm;
}
public Knoten knotenErsetzen(Knoten e) {
Knoten elternErsetzen = e;
Knoten ersetzen = e;
Knoten stamm = e.rechts;
while (stamm != null) {
elternErsetzen = ersetzen;
ersetzen = stamm;
stamm = stamm.links;
}
if (ersetzen != e.rechts) {
elternErsetzen.links = ersetzen.rechts;
ersetzen.rechts = e.rechts;
}
return ersetzen;
}
ich hoffe sehr dass ihr damit etwas anfangen könnt^^
mfg basha