BinaererSuchbaum/BinaererSuchbaum.java aktualisiert

This commit is contained in:
Denys Konovalov 2024-12-07 23:07:25 +01:00
parent 5f78700eb8
commit 479aa8f06c

View File

@ -1,112 +1,112 @@
// Generische Klasse für einen Binären Suchbaum // Generische Klasse für einen Binären Suchbaum
class BinaererSuchbaum<T extends Comparable<T>> { class BinaererSuchbaum<T extends Comparable<T>> {
// Knoten-Klasse // Knoten-Klasse
private static class Knoten<T> { private static class Knoten<T> {
T daten; T daten;
Knoten<T> links, rechts; Knoten<T> links, rechts;
Knoten(T daten) { Knoten(T daten) {
this.daten = daten; this.daten = daten;
links = rechts = null; links = rechts = null;
} }
} }
private Knoten<T> wurzel; private Knoten<T> wurzel;
// Methode zum Hinzufügen von Elementen // Methode zum Hinzufügen von Elementen
public void hinzufuegen(T wert) { public void hinzufuegen(T wert) {
this.wurzel = hinzufuegen(wert, wurzel); this.wurzel = hinzufuegen(wert, wurzel);
} }
private Knoten<T> hinzufuegen(T wert, Knoten<T> wurzel) { private Knoten<T> hinzufuegen(T wert, Knoten<T> wurzel) {
if (wert != null) if (wert != null)
if (wurzel == null) if (wurzel == null)
wurzel = new Knoten<T>(wert); wurzel = new Knoten<T>(wert);
else else
if (wert.compareTo(wurzel.daten) < 0) if (wert.compareTo(wurzel.daten) < 0)
wurzel.links = hinzufuegen(wert, wurzel.links); wurzel.links = hinzufuegen(wert, wurzel.links);
else if (wert.compareTo(wurzel.daten) > 0) else if (wert.compareTo(wurzel.daten) > 0)
wurzel.rechts = hinzufuegen(wert, wurzel.rechts); wurzel.rechts = hinzufuegen(wert, wurzel.rechts);
return wurzel; return wurzel;
} }
// Methode zur Suche eines Elements // Methode zur Suche eines Elements
public T suchen(T wert) { public T suchen(T wert) {
return suchen(wert, wurzel); return suchen(wert, wurzel);
} }
private T suchen(T wert, Knoten<T> wurzel) { private T suchen(T wert, Knoten<T> wurzel) {
if (wurzel == null || wert == null) if (wurzel == null || wert == null)
return null; return null;
else else
if (wert.compareTo(wurzel.daten) < 0) if (wert.compareTo(wurzel.daten) < 0)
return suchen(wert, wurzel.links); return suchen(wert, wurzel.links);
else if (wert.compareTo(wurzel.daten) > 0) else if (wert.compareTo(wurzel.daten) > 0)
return suchen(wert, wurzel.rechts); return suchen(wert, wurzel.rechts);
else if (wert.compareTo(wurzel.daten) == 0) else if (wert.compareTo(wurzel.daten) == 0)
return wurzel.daten; return wurzel.daten;
else else
return null; return null;
} }
// Methode zum Löschen eines Elements // Methode zum Löschen eines Elements
public void loeschen(T wert) { public void loeschen(T wert) {
this.wurzel = loeschen(wert, wurzel); this.wurzel = loeschen(wert, wurzel);
} }
private Knoten<T> loeschen(T wert, Knoten<T> wurzel) { private Knoten<T> loeschen(T wert, Knoten<T> wurzel) {
if (wurzel != null && wert != null) if (wurzel != null && wert != null)
if (wert.compareTo(wurzel.daten) < 0) if (wert.compareTo(wurzel.daten) < 0)
wurzel.links = loeschen(wert, wurzel.links); wurzel.links = loeschen(wert, wurzel.links);
else if (wert.compareTo(wurzel.daten) > 0) else if (wert.compareTo(wurzel.daten) > 0)
wurzel.rechts = loeschen(wert, wurzel.rechts); wurzel.rechts = loeschen(wert, wurzel.rechts);
else if (wurzel.links == null) else if (wurzel.links == null)
if (wurzel.rechts == null) if (wurzel.rechts == null)
wurzel = null; wurzel = null;
else else
wurzel = wurzel.rechts; wurzel = wurzel.rechts;
else else
if (wurzel.rechts == null) if (wurzel.rechts == null)
wurzel = wurzel.links; wurzel = wurzel.links;
else { else {
Knoten<T> minInhalt = blattSuchen(wurzel, false); Knoten<T> minInhalt = blattSuchen(wurzel, false);
minInhalt.links = wurzel.links; minInhalt.links = wurzel.links;
wurzel = minInhalt; wurzel = minInhalt;
wurzel.rechts = loeschen(minInhalt.daten, wurzel.rechts); wurzel.rechts = loeschen(minInhalt.daten, wurzel.rechts);
} }
return wurzel; return wurzel;
} }
public Knoten<T> blattSuchen(Knoten<T> wurzel, boolean links) { public Knoten<T> blattSuchen(Knoten<T> wurzel, boolean links) {
if (wurzel.daten == null) if (wurzel.daten == null)
return null; return null;
else else
if (links) if (links)
if (wurzel.links == null) if (wurzel.links == null)
return wurzel; return wurzel;
else else
return blattSuchen(wurzel.links, links); return blattSuchen(wurzel.links, links);
else else
if (wurzel.rechts == null) if (wurzel.rechts == null)
return wurzel; return wurzel;
else else
return blattSuchen(wurzel.rechts, links); return blattSuchen(wurzel.rechts, links);
} }
// Inorder-Traversierung für Ausgabe // Inorder-Traversierung für Ausgabe
public void inorderAusgabe() { public void inorderAusgabe() {
inorderRekursiv(wurzel); inorderRekursiv(wurzel);
System.out.println(); System.out.println();
} }
private void inorderRekursiv(Knoten<T> knoten) { private void inorderRekursiv(Knoten<T> knoten) {
if (knoten != null) { if (knoten != null) {
inorderRekursiv(knoten.links); inorderRekursiv(knoten.links);
System.out.print(knoten.daten + " "); System.out.print(knoten.daten + " ");
inorderRekursiv(knoten.rechts); inorderRekursiv(knoten.rechts);
} }
} }
} }