From 5f78700eb802e7b653c180334ebd7e8fb8b88ced Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Fri, 6 Dec 2024 10:44:30 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Bin=C3=A4rer=20Suchbaum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BinaererSuchbaum.java | 112 ++++++++++++++++++++++++++++++ BinaererSuchbaumDemoSchueler.java | 61 ++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 BinaererSuchbaum.java create mode 100644 BinaererSuchbaumDemoSchueler.java diff --git a/BinaererSuchbaum.java b/BinaererSuchbaum.java new file mode 100644 index 0000000..52801be --- /dev/null +++ b/BinaererSuchbaum.java @@ -0,0 +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); + } + } +} \ No newline at end of file diff --git a/BinaererSuchbaumDemoSchueler.java b/BinaererSuchbaumDemoSchueler.java new file mode 100644 index 0000000..1b606f2 --- /dev/null +++ b/BinaererSuchbaumDemoSchueler.java @@ -0,0 +1,61 @@ +import java.util.Scanner; + +public class BinaererSuchbaumDemoSchueler { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + BinaererSuchbaum baum = new BinaererSuchbaum<>(); + boolean laeuft = true; + + while (laeuft) { + System.out.println("\nBinärer Suchbaum - Menü:"); + System.out.println("0. Elemente automatisch hinzufügen"); + System.out.println("1. Element hinzufügen"); + System.out.println("2. Element suchen"); + System.out.println("3. Element löschen"); + System.out.println("4. Baum anzeigen (Inorder-Traversierung)"); + System.out.println("5. Programm beenden"); + System.out.print("Wähle eine Option: "); + + int auswahl = scanner.nextInt(); + double element; + switch (auswahl) { + case 0: + for (double i = -15; i <= 15; i+=0.5) { + System.out.println("Zu hinzufügendes Element: " + i); + baum.hinzufuegen(i); + System.out.println("Element hinzugefügt."); + } + break; + case 1 : + System.out.print("Zu hinzufügendes Element: "); + element = scanner.nextDouble(); + baum.hinzufuegen(element); + System.out.println("Element hinzugefügt."); + break; + case 2 : + System.out.print("Zu suchendes Element: "); + element = scanner.nextDouble(); + boolean gefunden = baum.suchen(element) != null; + System.out.println(gefunden ? "Element gefunden." : "Element nicht gefunden."); + break; + case 3 : + System.out.print("Zu löschendes Element: "); + element = scanner.nextDouble(); + baum.loeschen(element); + System.out.println("Element gelöscht (falls vorhanden)."); + break; + case 4 : + System.out.println("Baum (Inorder-Traversierung):"); + baum.inorderAusgabe(); + break; + case 5 : + laeuft = false; + System.out.println("Programm wird beendet."); + break; + default : System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); break; + } + } + + scanner.close(); + } +} \ No newline at end of file -- 2.45.2 From 479aa8f06cfbbec6d160137067571c67a649e84d Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Sat, 7 Dec 2024 23:07:25 +0100 Subject: [PATCH 2/3] BinaererSuchbaum/BinaererSuchbaum.java aktualisiert --- .../BinaererSuchbaum.java | 222 +++++++++--------- 1 file changed, 111 insertions(+), 111 deletions(-) rename BinaererSuchbaum.java => BinaererSuchbaum/BinaererSuchbaum.java (96%) 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 -- 2.45.2 From 48f0bd28bfb9ed7a51f47250e60f5931914b76a5 Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Sat, 7 Dec 2024 23:07:41 +0100 Subject: [PATCH 3/3] BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java aktualisiert --- .../BinaererSuchbaumDemoSchueler.java | 120 +++++++++--------- 1 file changed, 60 insertions(+), 60 deletions(-) rename BinaererSuchbaumDemoSchueler.java => BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java (97%) diff --git a/BinaererSuchbaumDemoSchueler.java b/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java similarity index 97% rename from BinaererSuchbaumDemoSchueler.java rename to BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java index 1b606f2..516d1b0 100644 --- a/BinaererSuchbaumDemoSchueler.java +++ b/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java @@ -1,61 +1,61 @@ -import java.util.Scanner; - -public class BinaererSuchbaumDemoSchueler { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - BinaererSuchbaum baum = new BinaererSuchbaum<>(); - boolean laeuft = true; - - while (laeuft) { - System.out.println("\nBinärer Suchbaum - Menü:"); - System.out.println("0. Elemente automatisch hinzufügen"); - System.out.println("1. Element hinzufügen"); - System.out.println("2. Element suchen"); - System.out.println("3. Element löschen"); - System.out.println("4. Baum anzeigen (Inorder-Traversierung)"); - System.out.println("5. Programm beenden"); - System.out.print("Wähle eine Option: "); - - int auswahl = scanner.nextInt(); - double element; - switch (auswahl) { - case 0: - for (double i = -15; i <= 15; i+=0.5) { - System.out.println("Zu hinzufügendes Element: " + i); - baum.hinzufuegen(i); - System.out.println("Element hinzugefügt."); - } - break; - case 1 : - System.out.print("Zu hinzufügendes Element: "); - element = scanner.nextDouble(); - baum.hinzufuegen(element); - System.out.println("Element hinzugefügt."); - break; - case 2 : - System.out.print("Zu suchendes Element: "); - element = scanner.nextDouble(); - boolean gefunden = baum.suchen(element) != null; - System.out.println(gefunden ? "Element gefunden." : "Element nicht gefunden."); - break; - case 3 : - System.out.print("Zu löschendes Element: "); - element = scanner.nextDouble(); - baum.loeschen(element); - System.out.println("Element gelöscht (falls vorhanden)."); - break; - case 4 : - System.out.println("Baum (Inorder-Traversierung):"); - baum.inorderAusgabe(); - break; - case 5 : - laeuft = false; - System.out.println("Programm wird beendet."); - break; - default : System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); break; - } - } - - scanner.close(); - } +import java.util.Scanner; + +public class BinaererSuchbaumDemoSchueler { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + BinaererSuchbaum baum = new BinaererSuchbaum<>(); + boolean laeuft = true; + + while (laeuft) { + System.out.println("\nBinärer Suchbaum - Menü:"); + System.out.println("0. Elemente automatisch hinzufügen"); + System.out.println("1. Element hinzufügen"); + System.out.println("2. Element suchen"); + System.out.println("3. Element löschen"); + System.out.println("4. Baum anzeigen (Inorder-Traversierung)"); + System.out.println("5. Programm beenden"); + System.out.print("Wähle eine Option: "); + + int auswahl = scanner.nextInt(); + double element; + switch (auswahl) { + case 0: + for (double i = -15; i <= 15; i+=0.5) { + System.out.println("Zu hinzufügendes Element: " + i); + baum.hinzufuegen(i); + System.out.println("Element hinzugefügt."); + } + break; + case 1 : + System.out.print("Zu hinzufügendes Element: "); + element = scanner.nextDouble(); + baum.hinzufuegen(element); + System.out.println("Element hinzugefügt."); + break; + case 2 : + System.out.print("Zu suchendes Element: "); + element = scanner.nextDouble(); + boolean gefunden = baum.suchen(element) != null; + System.out.println(gefunden ? "Element gefunden." : "Element nicht gefunden."); + break; + case 3 : + System.out.print("Zu löschendes Element: "); + element = scanner.nextDouble(); + baum.loeschen(element); + System.out.println("Element gelöscht (falls vorhanden)."); + break; + case 4 : + System.out.println("Baum (Inorder-Traversierung):"); + baum.inorderAusgabe(); + break; + case 5 : + laeuft = false; + System.out.println("Programm wird beendet."); + break; + default : System.out.println("Ungültige Auswahl. Bitte versuche es erneut."); break; + } + } + + scanner.close(); + } } \ No newline at end of file -- 2.45.2