import java.util.*; class Knoten{ Knoten links; T inhalt; Knoten rechts; Knoten(T el){ inhalt = el;} Knoten(T el, Knoten li, Knoten re){ inhalt = el; links = li; rechts = re; } } class TelEintrag{ String name; String nr; TelEintrag(String s, String n){ name=s;nr=n;} public String toString(){ return "( "+ name + ": " + nr +" )"; } } class BinärBaum implements Iterable{ private Knoten wurzel; BinärBaum(Knoten w){wurzel =w;} boolean istLeer(){ return wurzel == null;} int rekAnzKnoten(Knoten k){ if (k == null) return 0; return 1 + rekAnzKnoten(k.links) + rekAnzKnoten(k.rechts); } int anzKnoten(){ if (istLeer()) return 0; return 1 + rekAnzKnoten(wurzel.links) + rekAnzKnoten(wurzel.rechts); } int rekTiefe(Knoten k){ if (k == null) return 0; return 1 + Math.max(rekTiefe(k.links), rekTiefe(k.rechts)); } int tiefe(){ if (istLeer()) return 0; return 1 + Math.max(rekTiefe(wurzel.links), rekTiefe(wurzel.rechts)); } void LoescheLinkenTeilBaum(Knoten bp){ if (bp != null) if (bp.links != null){ LoescheTeilBaeume(bp.links); bp.links =null; } } void LoescheRechtenTeilBaum(Knoten bp){ if (bp != null) if (bp.rechts != null){ LoescheTeilBaeume(bp.rechts); bp.rechts =null; } } void LoescheTeilBaeume(Knoten bp){ LoescheLinkenTeilBaum(bp); LoescheRechtenTeilBaum(bp); } void TesteLoescheTeilBaeume(){ LoescheTeilBaeume(wurzel.rechts); } public Iterator iterator(){ // Levelorder Iterator ArrayList myArrayList = new ArrayList(anzKnoten()); LinkedList> queue = new LinkedList>(); queue.add(wurzel); while (!queue.isEmpty() ) { Knoten k = queue.removeFirst(); myArrayList.add(k.inhalt); if (k.links != null) queue.add(k.links); if (k.rechts != null) queue.add(k.rechts); } return myArrayList.iterator(); } public String toString(){ StringBuilder sb = new StringBuilder() ; for (T e : this) sb.append(e+" "); return sb.toString(); } } class BinärBaumLevelOrder{ public static void main(String ... args) { System.out.println("Baum Tester"); System.out.println("BAUMBEISPIEL"); BinärBaum buchstabenBaum = new BinärBaum(new Knoten('B', new Knoten('A',null, new Knoten('B')), new Knoten('U', new Knoten('M', new Knoten('E',new Knoten('E'), new Knoten('I',new Knoten('I'),new Knoten('L'))), new Knoten('S',new Knoten('P'),null)) , null) )); System.out.print("Levelorder: "); System.out.println(buchstabenBaum); System.out.println(); System.out.println("Operator Baum"); BinärBaum opBaum = new BinärBaum(new Knoten("-", new Knoten("+/-",new Knoten("12"),null), new Knoten("-",new Knoten("*", new Knoten("3"), new Knoten("( )^2", new Knoten("-", new Knoten("7"),new Knoten("5")), null)), new Knoten("9")) )); System.out.print("Levelorder: "); System.out.println(opBaum); Knoten ferdi = new Knoten(new TelEintrag("Ferdi","66 23 10")); Knoten fritz = new Knoten(new TelEintrag("Fritz","26 28 87"), ferdi,null); Knoten gitte = new Knoten(new TelEintrag("Gitte","37 37 92")); Knoten gerd = new Knoten(new TelEintrag("Gerd","24 78 56"), fritz, gitte); Knoten eva = new Knoten(new TelEintrag("Eva","45 28 87"), null, gerd); Knoten xaver = new Knoten(new TelEintrag("Xaver","72 63 63")); Knoten ulrich = new Knoten(new TelEintrag("Ulrich","78 37 73"), null, xaver); Knoten hans = new Knoten(new TelEintrag("Hans","16 17 28"), eva, ulrich); System.out.println(); System.out.println("Telefon Nummern Baum"); BinärBaum telBaum = new BinärBaum(hans); System.out.print("Levelorder: "); System.out.println(telBaum); System.out.println("Baumtiefe:"); System.out.println(telBaum.tiefe()); System.out.println(opBaum.tiefe()); System.out.println(buchstabenBaum.tiefe()); System.out.println("Anzahl der Knoten:"); System.out.println(telBaum.anzKnoten()); System.out.println(opBaum.anzKnoten()); System.out.println(buchstabenBaum.anzKnoten()); } }