bt_bb_section_bottom_section_coverage_image

Pravljenje binarnog stabla i pre-order ispis

program BinarnoStablo;
type cvor = ^slog;
    slog = record
        vrednost: Integer;
        levo: cvor;
        desno: cvor;
        end;

function KreirajCvor(Vrednost: integer): cvor;
var NoviCvor: cvor;
begin
New(NoviCvor);
NoviCvor^.Vrednost := Vrednost;
NoviCvor^.Levo := nil;
NoviCvor^.Desno := nil;
KreirajCvor := NoviCvor;
end;

procedure DodajUCvor(var Trenutni: cvor; Vrednost: integer);
begin
if Trenutni = nil then
    Trenutni := KreirajCvor(Vrednost)
else if Vrednost < Trenutni^.Vrednost then
    DodajUCvor(Trenutni^.levo, Vrednost)
else
    DodajUCvor(Trenutni^.desno, Vrednost);
end;

procedure IspisiStablo(element: cvor);
begin
    if element <> nil then
    begin
        write(element^.vrednost, ' ');
        IspisiStablo(element^.levo);
        IspisiStablo(element^.desno);
    end;
end;

var Koren: cvor;
    n, i, x :integer;
begin
Koren := nil;
readln(n);
for i := 1 to n do 
    begin
    readln(x);
    DodajUCvor(Koren, x);
    end;
write('Ispis stabla: ');
writeln;
IspisiStablo(Koren);
end.
Kako funkcioniše

1. Početak funkcije

if element <> nil then

Ova linija proverava da li je trenutni čvor nil (prazan). Ako je nil, znači da smo stigli do kraja grane stabla i funkcija se neće dalje pozivati za taj čvor. Ako nije nil, nastavljamo sa obradom čvora.

 

2. Ispis trenutnog čvora

write(element^.Vrednost, ' ')

Ovaj deo koda ispisuje vrednost trenutnog čvora na ekranu. Ovo se dešava pre nego što pozovemo rekurzivnu funkciju za levo i desno podstablo, što je karakteristično za pre-order obilazak.

 

3. Rekurzivni poziv za levo stablo

IspisiStablo(element^.levo);

Ovaj poziv znači da se funkcija IspisiStablo ponovo poziva, ali sada za levo podstablo trenutnog čvora. Ovdje je ključna rekurzija: svaki put kada se funkcija pozove za element^.levo, ona ponovo proverava da li je čvor nil i, ako nije, nastavlja dalje.

 

4. Rekurzivni poziv za desno stablo

IspisiStablo(element^.desno);

Ovaj deo poziva funkciju IspisiStablo za desno podstablo trenutnog čvora. Slično kao za levo podstablo, funkcija se ponovo poziva za desni podstablo dok ne dođe do nil (kada stigne do kraja stabla).

Komentariši