Sunteți pe pagina 1din 5

CAPITOLUL AL IV-LEA.

STRUCTURI ARBORESCENTE

1. Arbori i operaii cu arbori


Cele mai importante structuri neliniare care apar n algoritmi sunt structurile arborescente.
Prin ele se pot descrie diferite ramificaii.
Un arbore este o mulime finit A de unul sau mai multe noduri din care se distinge un nod
R numit rdcin toate celelalte noduri din A fiind partiionate n n 0 mulimi disjuncte A1, A2, ...,
An, fiecare dintre aceste mulimi fiind la rndul ei un arbore numit subarbore al rdcinii R.
Numrul de subarbori ai unui nod se numete gradul acelui nod. Nodurile cu gradul zero se
numesc noduri terminale, frunze sau noduri externe. Celelalte noduri se numesc noduri de
ramificare sau noduri interne. O mulime de arbori se numete pdure.
Pentru un arbore se definete nivelul unui nod n felul urmtor: rdcina arborelui are
nivelul 1 i rdcina unui subarbore al unui nod are nivelul cu 1 mai mare dect nivelul nodului
respectiv. Se definete nlimea unui arbore nivelul maxim al nodurilor din acel arbore.
Dac ordinea relativ a subarborilor fiecrui nod n parte este semnificativ spunem c
arborele este un arbore ordonat.
Pentru precizarea poziiilor unor noduri ale arborilor n raport cu alte noduri se folosesc
noiuni utilizate n arborii genealogici. Rdcinile subarborilor unui nod se numesc fii acestuia,
nodul fiind tatl acestor rdcini. Doi fii ai unui nod sunt frai ntre ei. Rdcina arborelui nu are
tat.
O clas particular de arbori o formeaz arborii binari. Se numete arbore binar un arbore
n care fiecare nod are cel mult doi subarbori, unul stng i cellalt drept, i, cnd are un singur
subarbore, se face precizarea dac este subarbore stng sau subarbore drept.
Dintre operaiile posibile cu arbori un rol important l deine parcurgerea arborilor. Prin
parcurgerea arborilor se nelege considerarea unei ordini totale asupra nodurilor din arbore.
Astfel se poate spune pentru orice nod care nod l precede i care l succede logic. Orice
permutare de noduri este o parcurgere, dar numai unele dintre ele sunt semnifictive pentru o
structur arborescent. Astfel, pentru arborii binari se folosesc de obicei trei tipuri de parcurgere:
parcurgerea n preordine, n care se prelucreaz rdcina, apoi se parcurge n preordine
subarborele stng i se parcurge n preordine subarborele drept;
parcurgerea n inordine, n care se parcurge n inordine subarborele stng, apoi se
prelucreaz rdcina i se parcurge n inordine subarborele drept;
parcurgerea n postordine, n care se parcurge n postordine subarborele stng apoi se
parcurge n postordine subarborele drept i se prelucreaz rdcina.
Se consider c parcurgerea unui arbore vid nu produce nici o aciune, arborele respectiv
fiind considerat parcurs. Diferitele tipuri de parcurgeri definesc reguli de deplasare ntr-un
1

arbore, de examinare sistematic a nodurilor lui n aa fel nct fiecare nod s fie considerat o
singur dat.
Pentru arbori oarecare se folosesc urmtoarele parcurgeri:
parcurgerea n preordine, n care se prelucreaz rdcina, apoi se parcurg n preordine
subarborii acestei rdcini;
parcurgerea n postordine, n care se parcurg n postordine subarborii corespunztori
rdcinii apoi se prelucreaz rdcina.
Pot fi efectuate i alte tipuri de operaii cu arbori cum ar fi adugarea unor noi noduri,
eliminarea unor noduri, combinarea a doi sau mai muli arbori, copierea unui arbore i altele
asemenea.

2. Reprezentarea arborilor binari


Modul de reprezentare a arborilor binari este de obicei prin folosirea unor celule ce conin
cmpurile: INFO n care se pun datele asociate nodului respectiv, LS care conine legtura la
celula n care se afl nodul fiu din stnga i LD care conine legtura la celula n care se afl
nodul fiu din dreapta al nodului respectiv.
n unele aplicaii este util i un al treilea cmp de legtur numit TATA care conine
legtura la celula n care se afl tatl nodului respectiv.
Parcurgerea unui arbore binar cu aceast reprezentare se face cu ajutorul unei stive.
Lsm cele trei tipuri de parcurgere ale arborilor binari sub forma de reprezentare anterioar ca
exerciii. Se poate face o parcurgere fr stiv dac n locul legturilor se pune legtur la
nodul ce precede n parcurgere nodul dat n cazul unei legturi LS i legtur la nodul care
succede n parcurgere nodul dat n cazul unei legturi LD. Aceste legturi trebuie deosebite de
legturile obinuite (ctre fii) printr-un marcaj. Se obine astfel o structur arborescent
nsilat. Propunem ca exerciii i parcurgerile structurilor nsilate.
Exist i alte tipuri de implementare a arborilor binari. Un astfel de model este folosit n
sortarea de ansamble pe care o vom prezenta n capitolul 6.

3. Reprezentarea arborilor oarecare


Un arbore oarecare poate fi reprezentat ca o structur de liste. Un exemplu este dat n
figura urmtoare. Am pus marcajul - (1) dac celula conine numai legturi i + (0) dac celula
conine i date.

Pentru parcurgerea unui arbore reprezentat sub aceast form este necesar o stiv n care
se pstreaz adresele celulelor din care urmeaz s se plece dup partea de legtur sau chiar
aceste legturi (eliminnd legturile nule). Prezentm n continuare un algoritm care parcurge
structura corespunztoare unui arbore i d cuvntul liniar cu paranteze corespunztor lui. Se
noteaz celulele prin Ei, adresa primei celule prin init, marcajul celulei prin M(Ei), partea de dat
prin D(Ei) i partea de legtur (adres) prin A(Ei). Se folosete de asemenea o stiv S care
memoreaz adresa celulelor care urmeaz s li se ia partea de legtur pentru a parcurge mai
departe structura i un indicator k pentru a indica dac trebuie s se deschid sau s se nchid
paranteza.

1.
2.
3.
4.
5.
6.
7.
8.

Algoritmul 4.1. (parcurgere arbore tip structur de liste)


se face S = , k = 1 i i = init
dac i = 0 atunci se merge la pasul 7
dac M(Ei) = + atunci se pune D(Ei) n cuvntul de ieire, se face i = A(Ei) i se merge la
pasul 6
dac k = 0 atunci se face k = 1 i se merge la pasul 6
se pune ( n cuvntul de ieire
se face A(Ei) S, i = D(Ei) i se merge la pasul 3
dac k = 0 atunci se pune ) n cuvntul de ieire
dac S atunci se face i S, k = 0 i se merge la pasul 2; altfel STOP

Se poate face parcurgerea arborelui fr o stiv suplimentar dac n loc s punem zero n
partea de legtur a ultimului element al unei liste ce corespunde unui nod diferit de rdcin
punem o legtur la celula din care s-a ajuns la aceast list. Se obine astfel o structur de liste
numit structur filetat sau circular. Vom numi legturile adugate adrese de ntoarcere. n
acest caz se folosesc dou marcaje pentru fiecare celul. Primul marcaj este cel anterior, 0 sau 1
dup cum celula este de date sau de legtur, i al doilea marcaj este 1 sau 0, dup cum celula
3

corespunztoare este ultima n list sau nu. Ultima celul a listei corespunztoare rdcinii conine
0 n partea de legtur, aceasta indicnd sfritul structurii. De exemplu, n figura urmtoare este
reprezentat structura filetat ce corespunde la arborele din figura precedent. Adresele de
ntoarcere au fost reprezentate punctat.

Se poate da un algoritm asemntor pentru a scrie cuvntul parantezat corespunztor unui


arbore sub form de structur filetat. Notaiile sunt aceleai ca la algoritmul anterior, numai c
M1(Ei) i M2(Ei) sunt primul, respectiv al doilea marcaj, iar k indic dac o celul de legtur este
atins pentru prima sau a doua oar.

1.
2.
3.
4.
5.
6.
7.
8.

Algoritmul 4.2. (parcurgere arbore tip structur filetat)


se face k = 1 i i = init
dac i = 0 atunci STOP
dac M1(Ei) = 0 atunci se merge la pasul 6
dac k = 1 atunci se face k = 0, i = D(Ei) i se merge la pasul 3
dac M2(Ei) = 1 atunci se pune ) n cuvntul de ieire; altfel se face k = 1
se face i = A(Ei) i se merge la pasul 2
se pune n cuvntul de ieire A(Ei); dac M2(Ei) = 1 atunci se merge la pasul 6
se pune ( n cuvntul de ieire, se face k = 1 i se merge la pasul 6

Structurile de liste circulare nu pot fi folosite n cazul cnd o sublist este distribuit de
dou sau mai multe liste. Dac ns se folosesc mai multe elemente finale cu diferite adrese de
ntoarcere, atunci pentru parcurgere este necesar din nou folosirea unei stive.
Structurile de liste prezentate pot fi parcurse fr stiv numai ntr-un singur sens. Pentru a
parcurge aceste structuri n ambele sensuri, fiecare celul a listei este prevzut cu cte dou
legturi, una ctre elementul care l precede logic i alta ctre cel care l seccede. Aceste structuri
de liste se numesc structuri simetrice.

Un
alt
mod
de
reprezentare
a
arborilor
oarecare este folosirea unor
celule ce conin cmpurile:
INFO n care se pun datele
asociate nodului respectiv, FIU
care conine legtura la celula
n care se afl primul dintre fii
nodului i FRATE care conine
legtura la celula n care se afl
urmtorul frate al nodului. n
unele aplicaii este util i un al
treilea cmp de legtur numit
TATA care conine legtura la
celula n care se afl tatl
nodului respectiv. De exemplu,
arborele din exemplul anterior
se poate reprezenta sub forma
alturat.
Pentru
toate
reprezentrile de arbori este
important de a cunoate
rdcina R a arborelui, deoarece
prelucrrile
ce
presupun
structuri arborescente se fac, de
obicei, plecnd de la rdcin
i urmnd diferitele legturi.
Sunt unele aplicaii care se pot rezolva prin a stabili dac dou elemente aparin sau nu
la un acelai arbore. Astfel de structuri se pot reprezenta prin celule care conin partea de
informaie i cte o legtur ctre tatl elementului. Rdcina fiecrui arbore are legtura 0.
Dou elemente aparin la acelai arbore dac rdcinile la care se ajung din ele coincid. Deci
este suficient de a pleca din fiecare element i urmnd legturile pn se ajunge ntr-un nod care
are legtura 0. Dac aceste noduri coincid, atunci cele dou noduri fac parte din acelai arbore,
altfel ele fac parte din arbori diferii. Pentru reuniunea a doi arbori de aceast form este
suficient s definim drept tat al rdcinii unuia dintre ei ca fiind rdcina celuilalt arbore.
Ca aplicaii pot fi determinarea componentelor conexe i tari conexe ale unui graf
direcionat, determinarea unui arbore parial de cost minim pentru un graf nedirecionat i
colorarea hrilor pe care le propunem ca exerciii.

S-ar putea să vă placă și