Hallo, ich habe hier 2 Klassen zur Binären Rot Schwarz bäumen (eig 3 die main habe ich nicht rein kopiert). Ich soll jetzt als Schlüssel bspw:
„J“,„A“,„V“,„A“, in den initial leeren Rot-Schwarz Baum eingeben. Und die Position als Wert mitgeben, an dem der Buchstabe in dem Wort JAVA steht.
Dafür habe ich die Instanzvariable key als String deklariert statt als Integer (hoffe das stimmt). Und die Postion der Buchstabe gebe ich auch selber im Konstruktor als wert mit soweit sollte es stimmen oder?
meine main sieht so aus bis jetzt:
public static void main (String [] args){
BST bst = new BST();
bst.put(null, "J", 0);
}
Irgendwie habe ich totale Schwierigkeiten damit meinen Programm auszuführen, wie kann ich das jetzt umsetzen(ausführen)? Ich denke (hoffe) mein Code sollte so weit eigentlich passen. Wenn ich ein System.out(bst) mache, bekomme ich natürlich nur den Speicherbereich. Kann mir da jemand helfen? Danke schon mal!
„J“,„A“,„V“,„A“, in den initial leeren Rot-Schwarz Baum eingeben. Und die Position als Wert mitgeben, an dem der Buchstabe in dem Wort JAVA steht.
Dafür habe ich die Instanzvariable key als String deklariert statt als Integer (hoffe das stimmt). Und die Postion der Buchstabe gebe ich auch selber im Konstruktor als wert mit soweit sollte es stimmen oder?
meine main sieht so aus bis jetzt:
public static void main (String [] args){
BST bst = new BST();
bst.put(null, "J", 0);
}
Irgendwie habe ich totale Schwierigkeiten damit meinen Programm auszuführen, wie kann ich das jetzt umsetzen(ausführen)? Ich denke (hoffe) mein Code sollte so weit eigentlich passen. Wenn ich ein System.out(bst) mache, bekomme ich natürlich nur den Speicherbereich. Kann mir da jemand helfen? Danke schon mal!
Java:
public class Knoten {
public static final boolean ROT = true;
public static final boolean SCHWARZ = false;
public String key;
public Integer wert;
public Knoten linkesKind, rechtesKind;
public Knoten wurzel;
boolean farbe;
public Knoten(String key, Integer wert, boolean farbe) {
this.key = key;
this.wert = wert;
this.farbe = farbe;
}
}
public class BST {
public static final boolean ROT = true;
public static final boolean SCHWARZ = false;
public Knoten wurzel;
public String key;
public Integer wert;
public Integer findeWert(String key){
Knoten x = wurzel;
while(x!=null){
int vergleich = key.compareTo(x.key);
if(vergleich > 0){
x = x.rechtesKind;
}
else if(vergleich < 0){
x = x.linkesKind;
}
else return x.wert;
}
return null;
}
public void put(){
wurzel = put(wurzel, key, wert);
}
public Knoten put(Knoten h, String key, Integer wert){
if( h == null){
return new Knoten(key, wert, ROT);
}
int vergleich = key.compareTo(h.key);
if(vergleich < 0){
h.linkesKind = put(h.linkesKind, key, wert);
}else if(vergleich > 0){
h.rechtesKind = put(h.rechtesKind, key, wert);
}
else h.wert = wert;
if(istRot(h.rechtesKind)&&!istRot(h.linkesKind)){
h = linksRotation(h); //nach links rotieren
}
if(istRot(h.linkesKind)&&istRot(h.linkesKind.linkesKind)){
h = rechtsRotation(h); //rotiere rechts,weil beide kinder rot
}
if(istRot(h.linkesKind)&&istRot(h.rechtesKind)){
tauscheFarben(h);
}
return h;
}
public boolean istRot(Knoten x){
if(x == null){
return false;
}
return x.farbe == ROT;
}
public Knoten linksRotation(Knoten h){
Knoten x = h.rechtesKind;
h.rechtesKind = h.linkesKind;
x.farbe = h.farbe;
h.farbe = ROT;
return x;
}
public Knoten rechtsRotation(Knoten h){
Knoten x = h.linkesKind;
h.linkesKind = h.rechtesKind;
x.farbe = h.farbe;
h.farbe = ROT;
return x;
}
public void tauscheFarben(Knoten h){
h.farbe = ROT;
h.linkesKind.farbe = SCHWARZ;
h.rechtesKind.farbe = SCHWARZ;
}
}