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 {
|
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