Professional Documents
Culture Documents
Noiuni generale
Se numete Arbore cu rdcin = graf neorientat conex fr cicluri n care unul din noduri este
desemnat ca rdcin. Nodurile pot fi aezate pe niveluri ncepnd cu rdcina care este
plasat pe nivelul 1.
Rdcin = Nod special care genereaz aezarea unui arbore pe niveluri; Aceast operaie se
efectueaz n funcie de lungimea lanurilor prin care celelalte noduri sunt legate de rdcin.
Descendent = ntr-un arbore cu rdcin nodul y este descendentul nodului x dac este situat
pe un nivel mai mare dect nivelul lui x i exist un lan care le unete i nu trece prin rdcin.
Descendent direct / fiu = ntr-un arbore cu rdcin nodul y este fiul (descendentul direct)
nodului x dac este situat pe nivelul imediat urmtor nivelului lui x i exist muchie ntre x i y.
Ascendent = ntr-un arbore cu rdcin nodul x este ascendentul nodului y dac este situat pe
un nivel mai mic dect nivelul lui y i exist un lan care le unete i nu trece prin rdcin.
Ascendent direct / printe = ntr-un arbore cu rdcin nodul x este printele (ascendentul
direct) nodului y dac este situat pe nivelul imediat superior (cu numr de ordine mai mic)
nivelului lui y i exist muchie ntre x i y.
Frai = ntr-un arbore cu rdcin nodul x este fratele nodului y dac au acelai printe.
Frunz = ntr-un arbore cu rdcin nodul x este frunz dac nu are nici un descendent direct
Exemplu
- Nodul 1 este rdcin.
- Nodurile 5, 6, 7 sunt fii nodului 3.
- Nodul 7 este printele nodurilor 9 i 10;
- Nodul 9 este descendentul lui 3
- Nodul 3 este ascendentul lui 10
- Nodurile 8, 9 i 10 sunt frunze
- Nodurile 5, 6 i 7 sunt frai.
Arborii binari sunt un tip aparte de arbori, n care fiecare nod are
maxim 2 copii. Pentru un nod dat, ntr-un arbore binar, vom avea
copilul din stnga, i copilul din dreapta. Exemplu:
Arborele din figura a are 8 noduri, nodul 1 fiind rdcina. Acesta are
ca i copil stnga nodul nr.2, iar ca i copil dreapta nodul nr.3. La
rndul su nodul nr.2 are dect un copil(stnga), i anume nodul nr.4.
Deci un nod dintr-un arbore binar poate avea 2 copii (st i dr), un
singur copil (doar st sau doar dr) sau nici unul (exemplu nodul 8).
Nodurile care nu au nici un copil se numesc noduri frunz.
Nodurile care au 1 sau 2 copii se numesc noduri interne.
Vectorul drept:
3
Crearea
i
afiarea
unui
arbore
binar
(recursiv)
Program P130;
end;
{Crearea unui arbore binar recursie}
type Arbore=^Nod;
Nod=record
Info: string;
St,Dr: Arbore
end;
var T : Arbore; {radacina}
function Arb_Creare: Arbore;
{crearea arborelui binar}
var R: Arbore;
s: string;
begin
readln(s);
if s='' then Arb_Creare:=nil
else begin
new(R);
R^.Info:=s;
writeln('Dati descendentul
stang al nodului ',s,':');
R^.St:=Arb_Creare;
writeln('Dati descendentul
drept al nodului ',s,':');
R^.Dr:=Arb_Creare;
Arb_Creare:=R;
end; {Arb_Creare}
procedure Arb_Afis(T: Arbore;
nivel: integer);
{afisarea arborelui binar}
var i: integer;
begin
if T<>nil then begin
Arb_Afis(T^.St, nivel+1);
for i:=1 to nivel do
write('
');
writeln(T^.Info);
Arb_Afis(T^.Dr, nivel+1);
end;
end; {Arb_Afis}
begin
writeln('Dati radacina:');
T:=Arb_Creare;
Arb_Afis(T, 0);
readln;
end.
Funcia Arb_Creare citete de la
tastatur informaia util, dac se
introduce un ir vid nu se creeaz nci
un nod.
Dati radacina:
1
Dati descendentul stang al
nodului 1:
2
Dati descendentul stang al
nodului 2:
4
Dati descendentul stang al
nodului 4:
5
6
7
Exemplu
parcurgere svd - n inordine
42516378
parcurgere vsd - n preordine
12453678
parcurgere sdv - n postordine
45268731
Program P131;
',s,':');
{Parcurgerea arborelui binar}
R^.Dr:=Arb_Creare;
type Arbore=^Nod;
Arb_Creare:=R;
Nod=record
end;
Info: string;
end; {Arb_Creare}
St,Dr: Arbore
procedure Arb_Afis(T: Arbore;
end;
nivel: integer);
var T : Arbore; {radacina}
{afisarea arborelui binar}
function Arb_Creare: Arbore; var i: integer;
{crearea arborelui binar}
begin
var R: Arbore;
if T<>nil then begin
s: string;
Arb_Afis(T^.St,
begin
nivel+1);
readln(s);
for i:=1 to nivel do
if s='' then Arb_Creare:=nil
write('
');
else begin
writeln(T^.Info);
new(R);
Arb_Afis(T^.Dr,
R^.Info:=s;
nivel+1);
writeln('Dati
end;
descendentul stang al nodului end; {Arb_Afis}
',s,':');
R^.St:=Arb_Creare;
writeln('Dati
descendentul drept al nodului
writeln(T^.Info)
end;
end; {SDR}
begin
writeln('Dati radacina:');
T:=Arb_Creare;
Arb_Afis(T, 0);
readln;
writeln('Parcurgere in
preordine:');
RSD(T);
readln;
writeln('Parcurgere in
inordine:');
SRD(T);
readln;
writeln('Parcurgere in
postordine:');
SDR(T);
end.
Dati radacina:
1
Dati descendentul drept al nodului 8:
Dati descendentul stang al nodului 1:
2
4
Dati descendentul stang al nodului 2: 2
4
5
Dati descendentul stang al nodului 4: 1
6
Dati descendentul drept al nodului 4: 3
7
Dati descendentul drept al nodului 2:
8
5
Dati descendentul stang al nodului 5: Parcurgere in preordine:
1
Dati descendentul drept al nodului 5: 2
4
Dati descendentul drept al nodului 1: 5
3
3
Dati descendentul stang al nodului 3: 6
6
7
Dati descendentul stang al nodului 6: 8
Dati descendentul drept al nodului 6: Parcurgere in inordine:
4
Dati descendentul drept al nodului 3: 2
7
5
Dati descendentul stang al nodului 7: 1
6
Dati descendentul drept al nodului 7: 3
8
7
Dati descendentul stang al nodului 8: 8
Parcurgere in postordine:
4
5
2
6
8
7
3
1