pushed
parent
5a28e60a7b
commit
26814d38a4
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue