uses Crt; type wsk_wezel = ^wezel; wezel = record lewe,prawe: wsk_wezel; wartosc: integer end; var pierwszy,w_wezel: wsk_wezel; opcja,st: integer; cl,cr: string; procedure Wczytaj(nowa_wartosc: wsk_wezel); begin ClrScr; writeln(' Wczytywanie danych do w©zˆa drzewa '); writeln; writeln; writeln('Podaj warto˜† jako liczb© integer:'); with nowa_wartosc^ do readln(wartosc) end; procedure Buduj(startowy, nowy: wsk_wezel); begin { je˜li w©zeˆ nowy powinien by† umieszczony na lewo } if nowy^.wartosc < startowy^.wartosc then if startowy^.lewe = nil then startowy^.lewe := nowy else Buduj(startowy^.lewe, nowy) else { na prawo } if startowy^.prawe = nil then startowy^.prawe := nowy else Buduj(startowy^.prawe,nowy) end; procedure Druk(w_wezel: wsk_wezel; korzen,wsp_x,wsp_y: integer); var i: integer; begin if w_wezel <> nil then begin if (w_wezel^.lewe <> nil) or (w_wezel^.prawe <> nil) then korzen := w_wezel^.wartosc else begin gotoxy(wsp_x,wsp_y); writeln(w_wezel^.wartosc) end; if w_wezel^.lewe <> nil then begin if wsp_x = 1 then begin gotoxy(wsp_x,wsp_y); write(korzen); for i := 1 to 4 do begin gotoxy(wsp_x+1,wsp_y+i); writeln(Chr(179)) end; gotoxy(wsp_x+1,wsp_y+4); write(cl); wsp_y := wsp_y + 2 end else begin gotoxy(wsp_x,wsp_y); write(korzen); gotoxy(wsp_x,wsp_y+1); writeln(Chr(179)); gotoxy(wsp_x,wsp_y+2); write(cl) end; Druk(w_wezel^.lewe,korzen,wsp_x+3,wsp_y+2); if wsp_x = 1 then wsp_y := wsp_y - 2 end; if w_wezel^.prawe <> nil then begin if wsp_x = 1 then begin gotoxy(wsp_x,wsp_y); write(korzen); for i := 1 to 4 do begin gotoxy(wsp_x+1,wsp_y-i); writeln(Chr(179)) end; gotoxy(wsp_x+1,wsp_y-4); write(cr); wsp_y := wsp_y - 2 end else begin gotoxy(wsp_x,wsp_y); write(korzen); gotoxy(wsp_x,wsp_y-1); writeln(Chr(179)); gotoxy(wsp_x,wsp_y-2); write(cr) end; Druk(w_wezel^.prawe,korzen,wsp_x+3,wsp_y-2); if wsp_x = 1 then wsp_y := wsp_y + 2 end end end; begin cl := Chr(192) + Chr(196); cr := Chr(218) + Chr(196); repeat ClrScr; writeln('1 - dodanie nowego w©zˆa, 2 - wy˜wietlenie drzewa'); readln(opcja); case opcja of 1: begin New(w_wezel); w_wezel^.lewe := nil; w_wezel^.prawe := nil; Wczytaj(w_wezel); if pierwszy = nil then { je˜li drzewo jest puste } pierwszy := w_wezel else Buduj(pierwszy,w_wezel) end; 2: begin ClrScr; if pierwszy = nil then begin writeln('Drzewo jest puste'); exit end; writeln('Struktura drzewa binarnego - Program napisany przez Adepta123 :)'); Druk(pierwszy,st,1,12) end end; until opcja = 2; readln end.