master
ahmad 2022-12-21 09:42:00 +01:00
parent 5a28e60a7b
commit 26814d38a4
1 changed files with 235 additions and 0 deletions

View File

@ -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<Knoten> 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;
}
}
}