diff --git a/BinaererSuchbaum.java b/BinaererSuchbaum/BinaererSuchbaum.java similarity index 96% rename from BinaererSuchbaum.java rename to BinaererSuchbaum/BinaererSuchbaum.java index 52801be..796b450 100644 --- a/BinaererSuchbaum.java +++ b/BinaererSuchbaum/BinaererSuchbaum.java @@ -1,112 +1,112 @@ -// Generische Klasse für einen Binären Suchbaum -class BinaererSuchbaum> { - // Knoten-Klasse - private static class Knoten { - T daten; - Knoten links, rechts; - - Knoten(T daten) { - this.daten = daten; - links = rechts = null; - } - } - - private Knoten wurzel; - - // Methode zum Hinzufügen von Elementen - public void hinzufuegen(T wert) { - this.wurzel = hinzufuegen(wert, wurzel); - } - - private Knoten hinzufuegen(T wert, Knoten wurzel) { - if (wert != null) - if (wurzel == null) - wurzel = new Knoten(wert); - else - if (wert.compareTo(wurzel.daten) < 0) - wurzel.links = hinzufuegen(wert, wurzel.links); - else if (wert.compareTo(wurzel.daten) > 0) - wurzel.rechts = hinzufuegen(wert, wurzel.rechts); - - return wurzel; - } - - // Methode zur Suche eines Elements - public T suchen(T wert) { - return suchen(wert, wurzel); - } - - private T suchen(T wert, Knoten wurzel) { - if (wurzel == null || wert == null) - return null; - else - if (wert.compareTo(wurzel.daten) < 0) - return suchen(wert, wurzel.links); - else if (wert.compareTo(wurzel.daten) > 0) - return suchen(wert, wurzel.rechts); - else if (wert.compareTo(wurzel.daten) == 0) - return wurzel.daten; - else - return null; - } - - - // Methode zum Löschen eines Elements - public void loeschen(T wert) { - this.wurzel = loeschen(wert, wurzel); - } - - private Knoten loeschen(T wert, Knoten wurzel) { - if (wurzel != null && wert != null) - if (wert.compareTo(wurzel.daten) < 0) - wurzel.links = loeschen(wert, wurzel.links); - else if (wert.compareTo(wurzel.daten) > 0) - wurzel.rechts = loeschen(wert, wurzel.rechts); - else if (wurzel.links == null) - if (wurzel.rechts == null) - wurzel = null; - else - wurzel = wurzel.rechts; - else - if (wurzel.rechts == null) - wurzel = wurzel.links; - else { - Knoten minInhalt = blattSuchen(wurzel, false); - minInhalt.links = wurzel.links; - wurzel = minInhalt; - wurzel.rechts = loeschen(minInhalt.daten, wurzel.rechts); - } - - return wurzel; - } - - public Knoten blattSuchen(Knoten wurzel, boolean links) { - if (wurzel.daten == null) - return null; - else - if (links) - if (wurzel.links == null) - return wurzel; - else - return blattSuchen(wurzel.links, links); - else - if (wurzel.rechts == null) - return wurzel; - else - return blattSuchen(wurzel.rechts, links); - } - - // Inorder-Traversierung für Ausgabe - public void inorderAusgabe() { - inorderRekursiv(wurzel); - System.out.println(); - } - - private void inorderRekursiv(Knoten knoten) { - if (knoten != null) { - inorderRekursiv(knoten.links); - System.out.print(knoten.daten + " "); - inorderRekursiv(knoten.rechts); - } - } +// Generische Klasse für einen Binären Suchbaum +class BinaererSuchbaum> { + // Knoten-Klasse + private static class Knoten { + T daten; + Knoten links, rechts; + + Knoten(T daten) { + this.daten = daten; + links = rechts = null; + } + } + + private Knoten wurzel; + + // Methode zum Hinzufügen von Elementen + public void hinzufuegen(T wert) { + this.wurzel = hinzufuegen(wert, wurzel); + } + + private Knoten hinzufuegen(T wert, Knoten wurzel) { + if (wert != null) + if (wurzel == null) + wurzel = new Knoten(wert); + else + if (wert.compareTo(wurzel.daten) < 0) + wurzel.links = hinzufuegen(wert, wurzel.links); + else if (wert.compareTo(wurzel.daten) > 0) + wurzel.rechts = hinzufuegen(wert, wurzel.rechts); + + return wurzel; + } + + // Methode zur Suche eines Elements + public T suchen(T wert) { + return suchen(wert, wurzel); + } + + private T suchen(T wert, Knoten wurzel) { + if (wurzel == null || wert == null) + return null; + else + if (wert.compareTo(wurzel.daten) < 0) + return suchen(wert, wurzel.links); + else if (wert.compareTo(wurzel.daten) > 0) + return suchen(wert, wurzel.rechts); + else if (wert.compareTo(wurzel.daten) == 0) + return wurzel.daten; + else + return null; + } + + + // Methode zum Löschen eines Elements + public void loeschen(T wert) { + this.wurzel = loeschen(wert, wurzel); + } + + private Knoten loeschen(T wert, Knoten wurzel) { + if (wurzel != null && wert != null) + if (wert.compareTo(wurzel.daten) < 0) + wurzel.links = loeschen(wert, wurzel.links); + else if (wert.compareTo(wurzel.daten) > 0) + wurzel.rechts = loeschen(wert, wurzel.rechts); + else if (wurzel.links == null) + if (wurzel.rechts == null) + wurzel = null; + else + wurzel = wurzel.rechts; + else + if (wurzel.rechts == null) + wurzel = wurzel.links; + else { + Knoten minInhalt = blattSuchen(wurzel, false); + minInhalt.links = wurzel.links; + wurzel = minInhalt; + wurzel.rechts = loeschen(minInhalt.daten, wurzel.rechts); + } + + return wurzel; + } + + public Knoten blattSuchen(Knoten wurzel, boolean links) { + if (wurzel.daten == null) + return null; + else + if (links) + if (wurzel.links == null) + return wurzel; + else + return blattSuchen(wurzel.links, links); + else + if (wurzel.rechts == null) + return wurzel; + else + return blattSuchen(wurzel.rechts, links); + } + + // Inorder-Traversierung für Ausgabe + public void inorderAusgabe() { + inorderRekursiv(wurzel); + System.out.println(); + } + + private void inorderRekursiv(Knoten knoten) { + if (knoten != null) { + inorderRekursiv(knoten.links); + System.out.print(knoten.daten + " "); + inorderRekursiv(knoten.rechts); + } + } } \ No newline at end of file