1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162:
| PROGRAM BAUMDEMONSTRATION; USES CRT; CONST MAX=3; TYPE BAUMINHALT=STRING[MAX]; BAUMZEIGER=^KNOTEN; KNOTEN=RECORD INHALT:BAUMINHALT; LINKS,RECHTS:BAUMZEIGER END; VAR BAUM,SBAUM:BAUMZEIGER; EINGABE:BAUMINHALT; AUSWAHL:CHAR; FELD:BYTE;
PROCEDURE EINFUEGEN(VAR SUCHBAUM:BAUMZEIGER;NEUINHALT:BAUMINHALT); BEGIN IF SUCHBAUM=NIL THEN BEGIN NEW(SUCHBAUM); WITH SUCHBAUM^ DO BEGIN INHALT:=NEUINHALT;LINKS:=NIL;RECHTS:=NIL END END ELSE IF NEUINHALT<SUCHBAUM^.INHALT THEN EINFUEGEN(SUCHBAUM^.LINKS,NEUINHALT) ELSE IF SUCHBAUM^.INHALT<NEUINHALT THEN EINFUEGEN(SUCHBAUM^.RECHTS,NEUINHALT) END;
PROCEDURE SUCHEN(SUCHBAUM:BAUMZEIGER;VAR GEFUNDEN:BAUMZEIGER;VAR SUCHINHALT:BAUMINHALT); VAR ERFOLG:BOOLEAN; BEGIN ERFOLG:=FALSE;GEFUNDEN:=SUCHBAUM; WHILE (GEFUNDEN<>NIL) AND NOT ERFOLG DO WITH GEFUNDEN^ DO IF SUCHINHALT<INHALT THEN GEFUNDEN:=LINKS ELSE IF INHALT<SUCHINHALT THEN GEFUNDEN:=RECHTS ELSE BEGIN ERFOLG:=TRUE;SUCHINHALT:=INHALT END; IF NOT ERFOLG THEN BEGIN GOTOXY(1,18);WRITE(SUCHINHALT,' NICHT GEFUNDEN!');DELAY(1000) END END;
PROCEDURE LOESCHEN(VAR SUCHBAUM:BAUMZEIGER;LOESCHINHALT:BAUMINHALT); VAR LOESCHZEIGER:BAUMZEIGER;
PROCEDURE ERSETZE(VAR GROESSTER:BAUMZEIGER); BEGIN IF GROESSTER^.RECHTS<>NIL THEN ERSETZE(GROESSTER^.RECHTS) ELSE BEGIN LOESCHZEIGER^.INHALT:=GROESSTER^.INHALT;LOESCHZEIGER:=GROESSTER; GROESSTER:=GROESSTER^.LINKS END END;
BEGIN IF SUCHBAUM<>NIL THEN IF LOESCHINHALT<SUCHBAUM^.INHALT THEN LOESCHEN(SUCHBAUM^.LINKS,LOESCHINHALT) ELSE IF SUCHBAUM^.INHALT<LOESCHINHALT THEN LOESCHEN(SUCHBAUM^.RECHTS,LOESCHINHALT) ELSE BEGIN LOESCHZEIGER:=SUCHBAUM; IF LOESCHZEIGER^.LINKS=NIL THEN SUCHBAUM:=LOESCHZEIGER^.RECHTS ELSE IF LOESCHZEIGER^.RECHTS=NIL THEN SUCHBAUM:=LOESCHZEIGER^.LINKS ELSE ERSETZE(LOESCHZEIGER^.LINKS); DISPOSE(LOESCHZEIGER) END END;
PROCEDURE LINIE(VON,BIS,ZEILE:INTEGER); VAR I:INTEGER; BEGIN IF VON<BIS THEN FOR I:=VON TO BIS DO BEGIN GOTOXY(I,ZEILE);WRITE('-') END ELSE FOR I:=VON DOWNTO BIS DO BEGIN GOTOXY(I,ZEILE);WRITE('-') END; GOTOXY(BIS,ZEILE+1);WRITE('I') END;
PROCEDURE KOPF; BEGIN CLRSCR; WRITELN('Demonstration einer Baumstruktur':56); WRITELN('--------------------------------':56) END;
PROCEDURE SCHREIBBAUM(B:BAUMZEIGER;X,Y,BREITE:INTEGER); VAR H:BYTE; BEGIN IF B<>NIL THEN BEGIN IF B^.LINKS<>NIL THEN BEGIN LINIE(X-FELD+1,X-BREITE DIV 2,Y); SCHREIBBAUM(B^.LINKS,X-BREITE DIV 2,Y+2,BREITE DIV 2) END; GOTOXY(X-FELD DIV 2,Y);WRITE(COPY(B^.INHALT,1,FELD)); IF B^.RECHTS<>NIL THEN BEGIN H:=0;IF FELD=1 THEN H:=1; LINIE(X+FELD-1+H,X+BREITE DIV 2,Y); SCHREIBBAUM(B^.RECHTS,X+BREITE DIV 2,Y+2,BREITE DIV 2) END END END;
PROCEDURE PREORDER(B:BAUMZEIGER); BEGIN IF B<>NIL THEN BEGIN WRITE(B^.INHALT:FELD+1);PREORDER(B^.LINKS);PREORDER(B^.RECHTS) END END;
PROCEDURE INORDER(B:BAUMZEIGER); BEGIN IF B<>NIL THEN BEGIN INORDER(B^.LINKS);WRITE(B^.INHALT:FELD+1);INORDER(B^.RECHTS) END END;
PROCEDURE POSTORDER(B:BAUMZEIGER); BEGIN IF B<>NIL THEN BEGIN POSTORDER(B^.LINKS);POSTORDER(B^.RECHTS);WRITE(B^.INHALT:FELD+1) END END;
BEGIN CLRSCR; REPEAT WRITE('MAXIMALE EINGABELAENGE (1-',MAX:1,') ? ');READLN(FELD) UNTIL FELD IN[1..MAX]; KOPF;BAUM:=NIL; REPEAT GOTOXY(1,23);CLREOL;GOTOXY(1,23); WRITE('(E)infuegen (L)oeschen (S)uchen (Q)uit : ');CLREOL; REPEAT AUSWAHL:=UPCASE(READKEY) UNTIL AUSWAHL IN['E','L','S','Q'];WRITELN(AUSWAHL); IF AUSWAHL<>'Q' THEN BEGIN REPEAT GOTOXY(1,24);CLREOL;GOTOXY(1,24); WRITE('Dein Begriff : ');READ(EINGABE) UNTIL LENGTH(EINGABE)>0; EINGABE:=COPY(EINGABE,1,FELD); CASE AUSWAHL OF 'E': BEGIN EINFUEGEN(BAUM,EINGABE);KOPF;SCHREIBBAUM(BAUM,40,5,40) END; 'L': BEGIN LOESCHEN(BAUM,EINGABE);KOPF;SCHREIBBAUM(BAUM,40,5,40) END; 'S': BEGIN SUCHEN(BAUM,SBAUM,EINGABE);KOPF; IF SBAUM<>NIL THEN SCHREIBBAUM(SBAUM,40,5,40) END END; GOTOXY(20,24);WRITE('Weiter mit <RETURN>');READ;GOTOXY(1,24);CLREOL; SCHREIBBAUM(BAUM,40,5,40); GOTOXY(1,16);WRITE('Preorder :');PREORDER(BAUM); GOTOXY(1,18);WRITE('Inorder :');INORDER(BAUM); GOTOXY(1,20);WRITE('Postorder :');POSTORDER(BAUM) END UNTIL AUSWAHL='Q' END. |