diff --git a/Baumy/src/Baum.java b/Baumy/src/Baum.java index e95417c..ff894e4 100644 --- a/Baumy/src/Baum.java +++ b/Baumy/src/Baum.java @@ -1,4 +1,239 @@ +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + public class Baum { + private Knoten wurzel; + public Queue list = new LinkedList<>(); + public StringBuilder sb ; + + public void add(int wert) throws Exception + { + if(wurzel == null) + { + wurzel = new Knoten(wert); + } + wurzel.add(wert); + } + public void inorder() + { + if(wurzel == null) + { + System.out.println("leer"); + return; + } + wurzel.inorder(); + } + public void preorder() + { + if(wurzel == null) + { + System.out.println("leer"); + return; + } + wurzel.preorder(); + } + public void postorder() + { + if(wurzel == null) + { + System.out.println("leer"); + return; + } + wurzel.postOrder(); + } + public String toString() + { + //BreitenSuche + if(wurzel == null) + { + return "Baum ist noch leer"; + } + + list.add(wurzel); + + wurzel.breitenSuche(); + + return sb.toString(); + + } + public void remove(int wert) + { + if(wurzel != null) + wurzel.remove(wert); + + + + } + + class Knoten{ + Knoten linkesKind; + Knoten rechtesKind; + private int value; + + public Knoten(int value) + { + this.value = value; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + + public void add(int wert) throws Exception + { + if(wert == this.value) + { + throw new Exception("Invalid Value"); + } + if(wert < this.value ) + { + if(this.linkesKind == null) + linkesKind = new Knoten(wert); + else + linkesKind.add(wert); + }else if(wert > this.value) + { + if(this.rechtesKind == null) + rechtesKind = new Knoten(wert); + else + rechtesKind.add(wert); + } + + } + public void inorder() + { + if(this.linkesKind != null) + linkesKind.inorder(); + + System.out.println(this.value); + + if(this.rechtesKind != null) + rechtesKind.inorder(); + } + + public void preorder() + { + + System.out.println(this.value); + + if(this.linkesKind != null) + linkesKind.inorder(); + + if(this.rechtesKind != null) + rechtesKind.inorder(); + + } + + public void postOrder() + { + + if(this.linkesKind != null) + linkesKind.inorder(); + + if(this.rechtesKind != null) + rechtesKind.inorder(); + + System.out.println(this.value); + + } + public String breitenSuche() + { + if(linkesKind != null) + { + list.add(linkesKind); + } + if(rechtesKind != null) + { + list.add(rechtesKind); + } + + //die Werte in StringBuilder ziehen und von der Liste löschen. + sb.append(list.poll().value + " "); + //Rekursion stoppt, wenn die Liste Leer ist. + if(list.size() == 0) + return ""; + + //Rekursion geht weiter + return list.peek().breitenSuche(); + } + + public boolean remove(int wert) + { + if(value < wert && linkesKind != null) + { + if(linkesKind.value == wert) + { + if(linkesKind.linkesKind == null && linkesKind.rechtesKind == null) + { + linkesKind = null; + } + else if(linkesKind.linkesKind != null && linkesKind.rechtesKind == null) + { + linkesKind = linkesKind.linkesKind; + } + else if(linkesKind.linkesKind == null && linkesKind.rechtesKind != null) + { + linkesKind = linkesKind.rechtesKind; + } + else + { + Knoten alt = linkesKind; + linkesKind = linkesKind.größterImTeilbaum(); + linkesKind.linkesKind = alt.linkesKind; + linkesKind.rechtesKind = alt.rechtesKind; + + } + + } + + else + { + linkesKind.remove(wert); + } + } + if(value > wert) + { + if(rechtesKind.value == wert) + rechtesKind = null; + else + rechtesKind.remove(wert); + } + + + + + return false; + } + + private Knoten größterImTeilbaum() + { + if(this.rechtesKind != null) + { + return this.rechtesKind.größterImTeilbaum(); + + } + return this; + + } + + } + + + + + + + + + + }