Protokoll der Informatikstunde am 12.02.2010 Protokollantin: Tina Urbanek MSS 12 Der binäre Baum a) Baumdiagramm Ein Element hat mehr als einen Nachfolger(Stammbaum, Prozedurenbaum, Hierarchiebaum, Organigramm). b) Binärer Baum Der binäre Baum hat immer höchstens 2 Nachfolger. c) Datenstruktur Wurzel (Anfang) Knoten(Eingang & 2Ausgänge) Blätter(nur Eingang -> keine Nachfolger mehr) Linker Nachfolger Rechter Nachfolger d) Der Elementarbaum W Wurzel L Linker Nachfolger R Rechter Nachfolger e) Beispiel A B D H C E F I G J K Leseverfahren: W-> L-> R ABDHECFIJGK f) Realisierung Datensatz mit 2 Zeigern Adresse Inhalt Zeiger links (Zl) Zeiger rechts(Zr) 1 A 2 3 2 B 4 5 3 C 6 7 4 D 8 NIL 5 E NIL NIL 6 F 9 10 7 G 11 NIL 8 H NIL NIL 9 I NIL NIL 10 J NIL NIL 11 K NIL NIL NIL= not in list (kennzeichnet Ende der Verzweigung) Die Listenreihenfolge ist beliebig, da die Struktur allein durch die Zeiger realisiert wird. g) Pascalstruktur TYPE zeiger = ^element; element = RECORD Knoten : CHAR; zl, zr : zeiger; END; h) Der Algorithmus 1. Grobstruktur: 1. Wurzel ausgeben 2. Wenn Linksbaum nicht leer, dann Linksbaum weiterbearbeiten sonst, wenn Rechtsbaum nicht leer, dann Rechtsbaum. 2. PASCAL PROCEDURE baumwlr (p:zeiger); BEGIN WRITE (p^.knoten); IF p^.zl <> NIL THEN baumwlr (p^.zl); IF p^.zr <> NIL THEN baumwlr (p^.zr); END; i) Aufbau eines Baumes Ziel: sortierte Reihenfolge bei WLR- Ausgabe 1. Grobstruktur 1) Freien Ast finden (Zeiger = NIL) 2) Neues Element erzeugen; beide Zeiger auf NIL setzen 3) Wenn der Ast noch nicht frei ist - mit dem neuen Element vergleichen 1. schon vorhanden Fehlermeldung 2. kleiner als neues Element links weiter 3. größer als neues Element rechts weiter 2. PASCAL PROCEDURE einfuegen (VAR p: zeiger, x: CHAR); BEGIN IF p= NIL THEN BEGIN NEW (p); p^.knoten:= x; p^.zl:= NIL; p^.zr:= NIL; END; ELSE IF p^.knoten= x THEN WRITELN (`Element vorhanden`) ELSE IF p^.knoten > x THEN einfuegen (p^.zl,x); ELSE einfuegen (p^.zr,x); END;