From 14abc4faae2cc50bee29e8510734f9a72a1a5654 Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Sat, 7 Dec 2024 23:08:47 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Bin=C3=A4rer=20Suchbaum=20(#5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-on: https://git.cantorgymnasium.de/denyskon/info-java/pulls/5 --- BinaererSuchbaum/BinaererSuchbaum.java | 112 ++++++++++++++++++ .../BinaererSuchbaumDemoSchueler.java | 61 ++++++++++ 2 files changed, 173 insertions(+) create mode 100644 BinaererSuchbaum/BinaererSuchbaum.java create mode 100644 BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java diff --git a/BinaererSuchbaum/BinaererSuchbaum.java b/BinaererSuchbaum/BinaererSuchbaum.java new file mode 100644 index 0000000..796b450 --- /dev/null +++ b/BinaererSuchbaum/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/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java b/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java new file mode 100644 index 0000000..516d1b0 --- /dev/null +++ b/BinaererSuchbaum/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 From ae5575258743d1c65d0f9500cd2b8ebcbb2dcc3f Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Wed, 8 Jan 2025 22:22:34 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Traversierung=20Bin=C3=A4rbaum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BinaererSuchbaum}/BinaererSuchbaum.java | 0 .../BinaererSuchbaumDemoSchueler.java | 0 .../Traversierung/Traversierung.java | 109 ++++++++++++++++++ .../Aktienhandel}/Aktie.java | 0 .../Aktienhandel}/Broker.java | 0 .../Aktienhandel}/DayTrader.java | 0 .../Aktienhandel}/LangfristInvestor.java | 0 .../Aktienhandel}/Main.java | 0 .../Aktienhandel}/OnlineBroker.java | 0 .../Aktienhandel}/Person.java | 0 .../Aktienhandel}/Trader.java | 0 .../Bibliothek}/Bibliothek.java | 0 .../Bibliothek}/BibliotheksApp.java | 0 {Bibliothek => Klassen/Bibliothek}/Buch.java | 0 .../Technikladen}/Client.java | 0 .../Technikladen}/Order.java | 0 .../Technikladen}/OrderEntry.java | 0 .../Technikladen}/OrderSystem.java | 0 .../Technikladen}/Product.java | 0 .../Technikladen}/Receipt.java | 0 .../Technikladen}/StorageManager.java | 0 .../Technikladen}/TechStore.java | 2 + 22 files changed, 111 insertions(+) rename {BinaererSuchbaum => Datenstrukturen/BinaererSuchbaum}/BinaererSuchbaum.java (100%) rename {BinaererSuchbaum => Datenstrukturen/BinaererSuchbaum}/BinaererSuchbaumDemoSchueler.java (100%) create mode 100644 Datenstrukturen/Traversierung/Traversierung.java rename {Aktienhandel => Klassen/Aktienhandel}/Aktie.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/Broker.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/DayTrader.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/LangfristInvestor.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/Main.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/OnlineBroker.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/Person.java (100%) rename {Aktienhandel => Klassen/Aktienhandel}/Trader.java (100%) rename {Bibliothek => Klassen/Bibliothek}/Bibliothek.java (100%) rename {Bibliothek => Klassen/Bibliothek}/BibliotheksApp.java (100%) rename {Bibliothek => Klassen/Bibliothek}/Buch.java (100%) rename {Technikladen => Klassen/Technikladen}/Client.java (100%) rename {Technikladen => Klassen/Technikladen}/Order.java (100%) rename {Technikladen => Klassen/Technikladen}/OrderEntry.java (100%) rename {Technikladen => Klassen/Technikladen}/OrderSystem.java (100%) rename {Technikladen => Klassen/Technikladen}/Product.java (100%) rename {Technikladen => Klassen/Technikladen}/Receipt.java (100%) rename {Technikladen => Klassen/Technikladen}/StorageManager.java (100%) rename {Technikladen => Klassen/Technikladen}/TechStore.java (99%) diff --git a/BinaererSuchbaum/BinaererSuchbaum.java b/Datenstrukturen/BinaererSuchbaum/BinaererSuchbaum.java similarity index 100% rename from BinaererSuchbaum/BinaererSuchbaum.java rename to Datenstrukturen/BinaererSuchbaum/BinaererSuchbaum.java diff --git a/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java b/Datenstrukturen/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java similarity index 100% rename from BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java rename to Datenstrukturen/BinaererSuchbaum/BinaererSuchbaumDemoSchueler.java diff --git a/Datenstrukturen/Traversierung/Traversierung.java b/Datenstrukturen/Traversierung/Traversierung.java new file mode 100644 index 0000000..f90fb72 --- /dev/null +++ b/Datenstrukturen/Traversierung/Traversierung.java @@ -0,0 +1,109 @@ +import java.util.LinkedList; +import java.util.Queue; + +public class Traversierung { + public static void preOrder(Node knoten) { + // 1. Wert des Knotens ausgeben + System.out.print(knoten.wert + " "); + + // 2. Rekursiv für linken Teilbaum ausführen + if (knoten.links != null) + preOrder(knoten.links); + + // 3. Rekursiv für rechten Teilbaum ausführen + if (knoten.rechts != null) + preOrder(knoten.rechts); + } + + public static void inOrder(Node knoten) { + // 1. Rekursiv für linken Teilbaum ausführen + if (knoten.links != null) + inOrder(knoten.links); + + // 2. Wert des Knotens ausgeben + System.out.print(knoten.wert + " "); + + // 3. Rekursiv für rechten Teilbaum ausführen + if (knoten.rechts != null) + inOrder(knoten.rechts); + } + + public static void postOrder(Node knoten) { + // 1. Rekursiv für linken Teilbaum ausführen + if (knoten.links != null) + postOrder(knoten.links); + + // 2. Rekursiv für rechten Teilbaum ausführen + if (knoten.rechts != null) + postOrder(knoten.rechts); + + // 3. Wert des Knotens ausgeben + System.out.print(knoten.wert + " "); + } + + public static void levelOrder(Node knoten) { + // 1. Schlange anlegen + Queue queue = new LinkedList<>(); + + // 2. Wurzel zur Schlange hinzufügen + queue.add(knoten); + + // 3. Solange die Schlange nicht leer ist... + while (!queue.isEmpty()) { + // 4. Linken und rechten Kindknoten zur Schlange hinzufügen + knoten = queue.peek(); + if (knoten.links != null) queue.add(knoten.links); + if (knoten.rechts != null) queue.add(knoten.rechts); + + // 5. Wert des Hauptknotens ausgeben + System.out.print(knoten.wert + " "); + + // 6. Hauptknoten aus der Schlange entfernen + queue.poll(); + + // weiter bei 3.... + } + } + + public static void main(String[] args) { + // Beispielbaum aus der PDF-Datei + Node wurzel = new Node(3); + wurzel.links = new Node(1); + wurzel.links.links = new Node(13); + wurzel.rechts = new Node(10); + wurzel.rechts.links = new Node(11); + wurzel.rechts.rechts = new Node(16); + wurzel.rechts.rechts.links = new Node(15); + wurzel.rechts.rechts.rechts = new Node(2); + + System.out.print("Pre-order: "); + preOrder(wurzel); + System.out.println(); + // 3 1 13 10 11 16 15 2 + + System.out.print("In-order: "); + inOrder(wurzel); + System.out.println(); + // 13 1 3 11 10 15 16 2 + + System.out.print("Post-order: "); + postOrder(wurzel); + System.out.println(); + // 13 1 11 15 2 16 10 3 + + System.out.print("Level-order: "); + levelOrder(wurzel); + System.out.println(); + // 3 1 10 13 11 16 15 2 + } +} + +class Node { + int wert; + Node links; + Node rechts; + + Node(int wert) { + this.wert = wert; + } +} diff --git a/Aktienhandel/Aktie.java b/Klassen/Aktienhandel/Aktie.java similarity index 100% rename from Aktienhandel/Aktie.java rename to Klassen/Aktienhandel/Aktie.java diff --git a/Aktienhandel/Broker.java b/Klassen/Aktienhandel/Broker.java similarity index 100% rename from Aktienhandel/Broker.java rename to Klassen/Aktienhandel/Broker.java diff --git a/Aktienhandel/DayTrader.java b/Klassen/Aktienhandel/DayTrader.java similarity index 100% rename from Aktienhandel/DayTrader.java rename to Klassen/Aktienhandel/DayTrader.java diff --git a/Aktienhandel/LangfristInvestor.java b/Klassen/Aktienhandel/LangfristInvestor.java similarity index 100% rename from Aktienhandel/LangfristInvestor.java rename to Klassen/Aktienhandel/LangfristInvestor.java diff --git a/Aktienhandel/Main.java b/Klassen/Aktienhandel/Main.java similarity index 100% rename from Aktienhandel/Main.java rename to Klassen/Aktienhandel/Main.java diff --git a/Aktienhandel/OnlineBroker.java b/Klassen/Aktienhandel/OnlineBroker.java similarity index 100% rename from Aktienhandel/OnlineBroker.java rename to Klassen/Aktienhandel/OnlineBroker.java diff --git a/Aktienhandel/Person.java b/Klassen/Aktienhandel/Person.java similarity index 100% rename from Aktienhandel/Person.java rename to Klassen/Aktienhandel/Person.java diff --git a/Aktienhandel/Trader.java b/Klassen/Aktienhandel/Trader.java similarity index 100% rename from Aktienhandel/Trader.java rename to Klassen/Aktienhandel/Trader.java diff --git a/Bibliothek/Bibliothek.java b/Klassen/Bibliothek/Bibliothek.java similarity index 100% rename from Bibliothek/Bibliothek.java rename to Klassen/Bibliothek/Bibliothek.java diff --git a/Bibliothek/BibliotheksApp.java b/Klassen/Bibliothek/BibliotheksApp.java similarity index 100% rename from Bibliothek/BibliotheksApp.java rename to Klassen/Bibliothek/BibliotheksApp.java diff --git a/Bibliothek/Buch.java b/Klassen/Bibliothek/Buch.java similarity index 100% rename from Bibliothek/Buch.java rename to Klassen/Bibliothek/Buch.java diff --git a/Technikladen/Client.java b/Klassen/Technikladen/Client.java similarity index 100% rename from Technikladen/Client.java rename to Klassen/Technikladen/Client.java diff --git a/Technikladen/Order.java b/Klassen/Technikladen/Order.java similarity index 100% rename from Technikladen/Order.java rename to Klassen/Technikladen/Order.java diff --git a/Technikladen/OrderEntry.java b/Klassen/Technikladen/OrderEntry.java similarity index 100% rename from Technikladen/OrderEntry.java rename to Klassen/Technikladen/OrderEntry.java diff --git a/Technikladen/OrderSystem.java b/Klassen/Technikladen/OrderSystem.java similarity index 100% rename from Technikladen/OrderSystem.java rename to Klassen/Technikladen/OrderSystem.java diff --git a/Technikladen/Product.java b/Klassen/Technikladen/Product.java similarity index 100% rename from Technikladen/Product.java rename to Klassen/Technikladen/Product.java diff --git a/Technikladen/Receipt.java b/Klassen/Technikladen/Receipt.java similarity index 100% rename from Technikladen/Receipt.java rename to Klassen/Technikladen/Receipt.java diff --git a/Technikladen/StorageManager.java b/Klassen/Technikladen/StorageManager.java similarity index 100% rename from Technikladen/StorageManager.java rename to Klassen/Technikladen/StorageManager.java diff --git a/Technikladen/TechStore.java b/Klassen/Technikladen/TechStore.java similarity index 99% rename from Technikladen/TechStore.java rename to Klassen/Technikladen/TechStore.java index 3540304..e172c2a 100755 --- a/Technikladen/TechStore.java +++ b/Klassen/Technikladen/TechStore.java @@ -104,6 +104,8 @@ public class TechStore { } } } + + scnr.close(); } }