Wie mache ich hier eine Rekursion rein ?

Xalo

Mitglied
Hallo,

ich muss hier einen Rot-Schwarzbaum machen im Fach Algorithmen und Datenstruktur. Kann ich die Methode Print auch Rekursiv machen?

Ich bedanke mich im vorraus und frohes Fest.

Mit freundlichen Grüßen Xalo




public class Test {

private Knoten wurzel;
public Integer findeIndex(Character key) {

Knoten x = wurzel;

while (x != null) {
int vergleich = key.compareTo(x.key);
if (vergleich < 0) x = x.linkesKind;
else if (vergleich > 0) x = x.rechtesKind;
else return x.wert;
}
return null;
}

public static final boolean ROT = true;
public static final boolean SCHWARZ = false;

private class Knoten {
private Character key;
private Integer wert;
private Knoten linkesKind, rechtesKind, eltern;
boolean farbe;


Knoten(Character key, Integer wert, boolean farbe) {
this.key = key;
this.wert = wert;
this.farbe = farbe;

}
}

private Knoten linksRotation(Knoten h) {
Knoten x = h.rechtesKind;
h.rechtesKind = x.linkesKind;
x.linkesKind = h;
x.farbe = h.farbe;
h.farbe = ROT;
return x;
}

private Knoten rechtsRotation(Knoten h) {
Knoten x = h.linkesKind;
h.linkesKind = x.rechtesKind;
x.rechtesKind = h;
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;

}

private boolean istRot(Knoten x) {
if (x == null) return false;
return x.farbe == ROT;

}

public void put(Character key, Integer wert) {
wurzel = put(wurzel, key, wert);

}

public Knoten put(Knoten h, Character 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);
}
if (istRot(h.linkesKind) && istRot(h.linkesKind.linkesKind)) {
h = rechtsRotation(h);
}
if (istRot(h.linkesKind) && istRot(h.rechtesKind)) {
tauscheFarben(h);
}
return h;
}
public void print(){
System.out.println(wurzel.key);

System.out.println(wurzel.linkesKind.key);
System.out.println(wurzel.rechtesKind.key);

System.out.println(wurzel.linkesKind.linkesKind.key);
System.out.println(wurzel.linkesKind.rechtesKind.key);

System.out.println(wurzel.rechtesKind.rechtesKind.key);
System.out.println(wurzel.rechtesKind.linkesKind.key);

System.out.println(wurzel.linkesKind.linkesKind.linkesKind.key);
//System.out.println(wurzel.rechtesKind.rechtesKind.rechtesKind.key);

}

public static void main(String[] args) {

char[] a = {'W', 'E', 'I', 'H', 'N', 'A', 'C', 'H', 'T', 'E', 'N'}; //char array erstellt//

Test Baum = new Test();

for (char i = 0; i < a.length; i++) {
Baum.put(a, i + 1);
}
Baum.print();



}

}
 

MoxxiManagarm

Top Contributor
1. Bitte nutze Java Code-Tags
2. Dein Code kann ein wenig verbessert werden.
z.B.
Java:
private boolean istRot(Knoten x) {
  if (x == null) return false;
  return x.farbe;
}
3. zu deiner Frage: Ja das geht und ist auch die sinnvollste Variante hier, aber die gleiche Reihenfolge der Ausgabe wird schwierig.
 

Xalo

Mitglied
1.Sorry, bin leider nicht so oft hier deshalb wusste ich das nicht mit denn Tags
2. Wow vielen dank für denn Tipp, gibt's noch mehr stellen wo ich das besser machen kann bzw optimieren kann?
3. Kannst du mir sagen wie das hier geht ich hab's zwar probierte bin aber leider relativ neu was das programmieren angeht und hab mich noch nicht so gut mit Rekursionem beschäftigt bzw. Es fällt mir schwer das nachzuvollziehen

Vielen Dank im übrigen das du dir die Zeit genommen hast und die das angeschaut hast:)
 

MoxxiManagarm

Top Contributor
2)
- Wenn du die Wrapper Klassen für int und char nicht zwingend benötigst wäre es besser wenn du den primitiven Datentyp verwendest
- Brauchst du wirklich den eltern Knoten?
- Entsprechend der Namenskonvention sollte deine Instanz der Klasse Test nicht Baum sondern baum heißen
- Wieso nennst du die Klasse nicht Baum anstatt Test?
>> Insgesamt ist dein Code ziemlich gut für einen Anfänger! Meine Anmerkungen sind eher Kleinigkeiten
3) Deine Knoten sind immer Teilbäume. Du hast verschiedene Möglichkeiten den Baum auszugeben: Preorder (selbst, links, rechts), Inorder (links, selbst, rechts), Postorder (links, rechts, selbst)

Hier ein Beispiel für inorder, es verdeutlich es glaube ich besser als alle Worte:
Java:
public void print() {
  if(left != null) left.print();
  System.out.println(/*printself*/);
  if(right != null) right.print();
}
 

Xalo

Mitglied
Danke dir ,ich habe denn nicht ganz alleine gemacht , meine Professorin gibt uns immer einen teil vor damit es nicht zu schwer wird. Das was du am Ende beschrieben hast war das die Rekursion ?

Danke dir nochmal für deine Hilfe
 

Xalo

Mitglied
Kannst du mir sagen woher du die Werte
public void print() {
if(left != null) left.print();
System.out.println(/*printself*/);
if(right != null) right.print();
}
left und right hast also wie würde ich das mit denn Attributen machen die ich bei mir habe ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Wie mache ich den rekursiven Aufruf in IJVM Allgemeine Java-Themen 3
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
N Wie mache ich einen UnitTest? Allgemeine Java-Themen 16
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
R Sting.split() was mache ich falsch? Allgemeine Java-Themen 5
J Wie mache ich den Hintergrund einer Image durchsichtig? Allgemeine Java-Themen 7
Zrebna SonarLint: Warum kein Null-Referencing-CodeSmell-Hint hier? Allgemeine Java-Themen 23
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
N Ist Selenium hier das richtige Werkzeug? Allgemeine Java-Themen 1
Zrebna Wieviele Testfälle muss man hier schreiben? (Software Engineering) Allgemeine Java-Themen 13
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
J Einrückungstool mit Farblicher hervorhebung wie hier? Allgemeine Java-Themen 3
V VisualVM Was erkennt ihr hier? Allgemeine Java-Themen 9
E Queue: Wie kann hier ein null-Pointer Exception auftreten?! Allgemeine Java-Themen 11
R Was ist hier falsch? Abfragen Allgemeine Java-Themen 3
X Wer kann mir das hier erklären? Programm frisst RAM! Allgemeine Java-Themen 11
S Singleton hier sinnvol? Allgemeine Java-Themen 20
E Wieso returnt das hier 1? Allgemeine Java-Themen 3
W Wieso funktioniert dieser Code hier? Allgemeine Java-Themen 6
G Warum kommt hier NullPointerException? Allgemeine Java-Themen 3
F Threading oder kein Threading - das ist hier die Frage. Allgemeine Java-Themen 23
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
egrath Anonyme Methode - warum hier kein Compilerfehler Allgemeine Java-Themen 2
F Gutes Threads Tutorial hier aber trotzdem eine Frage Allgemeine Java-Themen 7
M Spring oder nicht, das ist hier die Frage Allgemeine Java-Themen 3
S Was ist hier falsch? Allgemeine Java-Themen 16
G wer muss hier wen aufrufen? Allgemeine Java-Themen 7
M Kann man hier noch was rausholen? Allgemeine Java-Themen 16
A Was passiert hier? Allgemeine Java-Themen 13
I Ist JNI hier richtig? Allgemeine Java-Themen 8
B Gibts sogar hier Allgemeine Java-Themen 3
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben