Sunteți pe pagina 1din 6

Arbori

Numim arbore un graf conex fără cicluri. Fie G=(X,U) un graf. Următoarele afirmaţii sunt echivalente:
1. G este un arbore
2. G este un graf conex minimal în raport cu această proprietate( eliminând o muchie oarecare se obţine un graf
ne-conex ).
3. G este un graf fără cicluri maximal în raport cu această proprietate( adăugând o muchie oarecare se obţine un
graf ce are cel puţin un ciclu ).
Un arbore cu n vârfuri are n-1 muchii.
Definiţii: Există un nod în care nu intră nici un arc, nod numit rădăcină.
Cu excepţia rădăcinii, fiecare nod are proprietatea că în el intră un singur arc. Acesta leagă nodul respectiv de
un alt nod numit predecesor sau părinte( ascendent direct ).
Din fiecare nod pot ieşi unul sau mai multe arce. Fiecare astfel de arc leagă nodul respectiv de un alt nod numit
succesor sau fiu al nodului( descendent direct ).
Două sau mai multe noduri care sunt descendenţi direcţi ai aceluiaşi nod părinte se numesc fraţi.
Nodurile sunt organizate pe nivele , primul nivel fiind cel al rădăcinii, iar nodurile de pe ultimul nivel se
caracterizează prin faptul că din ele nu mai iese nici un arc, aceste noduri fiind numite noduri terminale sau
frunze. Nodurile pot deţine informaţie utilă care poate fi de orice tip. Aceste informaţii se numesc şi chei ale
arborelui.
Arborii sunt folosiţi în general pentru a modela o ierarhie de elemente.
Astfel, fiecare element (nod) poate deţine un număr de unul sau mai mulţi descendenţi, iar în acest caz nodul
este numit părinte al nodurilor descendente (copii sau fii).
Fiecare nod poate avea un singur nod părinte. Un nod fără descendenţi este un nod terminal, sau nod frunză.
În schimb, există un singur nod fără părinte, iar acesta este întotdeauna rădăcina arborelui (root).
Un arbore binar este un caz special de arbore, în care fiecare nod poate avea maxim doi descendenţi: nodul
stâng, nodul drept.
Există arbori binari strict în care fiecare nod ce nu este frunză are exact doi descendenți direcți.
Parcurgerea arborilor binari
Avem 3 moduri de a parcurge în adâncime arborii, ce se implementeaza foarte ușor recursiv:
Preordine(RSD)
-Se parcurge rădăcina
-Se parcurge subarborele stâng
-Se parcurge subarborele drept
Inordine(SRD)
-Se parcurge subarborele stâng
-Se parcurge rădăcina
-Se parcurge subarborele drept
Postordine(SDR)
-Se parcurge subarborele stâng
-Se parcurge subarborele drept
-Se parcurge rădăcina
De exemplu, pentru arborele:

Avem parcurgerile:
Preordine RSD : 1 2 4 5 3 6 7 8
Inordine SRD : 4 2 5 1 6 3 7 8
Postordine SDR : 4 5 2 6 8 7 3 1
Parcurgerea în lățime
Se folosește o coadă, iar la fiecare pas se extrage din această coadă câte un nod și se adăugă înapoi în coadă
nodul stâng, respectiv drept al nodului scos. Acest algoritm continuă până când coada devine goală.
Metode de reprezentare
1. Matrice de adiacenţă
2. Liste de descendenţi pentru arbori binari
3. Vector de taţi
În primul caz se utilizează o matrice de adiacenţă construită ca în cazul grafurilor.
2. În acest caz se procedează astfel:
Specificăm nodul rădăcină r şi definim doi vectori S şi D care vor conţine succesorii nodurilor, astfel:
S[i] reprezintă nodul succesor stâng al nodului i, cu i=1,2,..,n
D[i] reprezintă nodul succesor drept al nodului i, cu i=1,2,..,n
Dacă nu există succesor elementul în cauză va fi 0.
3. În acest caz se procedează astfel:
Se utilizează un vector, de exemplu T, în care T[i] reține ce nod este tatăl nodului i. Pe poziția rădăcinii se reține
prin convenție valoarea 0.
Arbori binari de căutare
Un arbore binar de căutare (BST –Binary Search Tree) este un arbore binar care are asociată o cheie cu fiecare
din nodurile sale interne, cu proprietatea suplimentară că cheia fiecărui nod este mai mare sau egală cu cheile
din toate nodurile subarborelui său stâng şi mai mică sau egală cu cheile din toate nodurile subarborelui său
drept.
Definim succesorul unui nod x, nodul y cu cea mai mică valoarea a cheii dar cu cheie[y] ≥ cheie[x]
Definim predecesorul unui nod x, nodul y cu cea mai mare valoarea a cheii dar cucheie[y] ≤ cheie[x]
Pădure
Un graf fără cicluri se numeşte graf aciclic. Un graf aciclic şi conex este un arbore. În cazul grafului aciclic
fiecare componentă conexă este un arbore. Un graf neorientat aciclic, care s-ar putea să nu fie conex, se
numeşte pădure.

#include <iostream.h>
int n,a[10][10],comp[10];
int apare(int val,int nr,int v[100])
{int ok=0,i;
for(i=1;i<=nr;i++)
if(val==v[i])ok=1;
return ok;}
void adaug(int& nr,int v[100],int i)
{int j;
for(j=1;j<=n;j++)
if((a[i][j]==1)&&(!apare(j,nr,v))){nr++;
v[nr]=j;
}}
int main()
{int epadure=1,nrm,pc,nr,i,j,ok;
int v[100],vvf[100];
cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
vvf[i]=i;
for(i=1;i<=n;i++)
{for(j=1;j<i;j++)
{cout<<"a["<<i<<"]["<<j<<"]= ";cin>>a[i][j];a[j][i]=a[i][j];}
a[i][i]=0;}
do{i=1;while((i<=n)&&(vvf[i]==0))i++;ok=0;
if(i<=n){ok=1;
nr=1;
pc=1;
v[nr]=vvf[i];
while(pc<=nr){adaug(nr,v,v[pc]);pc++;}
nrm=0;
for(i=1;i<=nr;i++)
for(j=i+1;j<=nr;j++)
if(a[v[i]][v[j]]==1)nrm++;
if(nrm!=nr-1) epadure=0;
for(i=1;i<=nr;i++)vvf[v[i]]=0;
}}while(ok&&epadure);
if(epadure==1)cout<<"Da";
else cout<<"Nu";return 0;}

Hyperlinkuri UBB
http://www.cs.ubbcluj.ro/~gabis/sda/Cursuri/Curs11%20-
%20Arbori%20binari,%20TAD%20Arbore,%20Expresii%20aritmetice/Arbori&TAD%20ArboreBinar&Expresii%20arit
metice.pdf
http://www.cs.ubbcluj.ro/~gabitr/Cursul9.pdf

Aplicații:
1. Fie arborele binar de căutare:
15
/ \
10 20
/ / \
4 17 23
/\ / \ \
2 6 16 19 32
a) Parcurgeți în inordine arborele. b) Redesenați arborele după ce ați șters nodul 20
c) Redesenați arborele după ce ați adăgat valoarea 18.
2. Desenați un arbore binar de căutare rezultat în urma prelucrării valorilor 11, 6, 8, 19, 4, 10, 5, 17, 43, 49, 31 .
3. Desenați un arbore binar de căutare rezultat în urma prelucrării valorilor 11, 16, 28, 19, 14, 20, 35, 47, 33,
49, 21 precum și arborele binar de căutare rezultat în urma ștergerii valorii 11.
4. Fie arborele binar de căutare (BST):

a) Desenați arborele după inserarea cheilor: 6, 45, 32, 98, 55, 69, exact în această ordine.
b) Desenați arborele rezultat în urma ștergerii cheilor 9 și 45din arbore.
5. a) Desenați arborele după inserarea cheilor: 8;13;6;10;21;19.
b) Dându-se cheia de căutare 12 scrieți toate nodurile vizitate de algoritma în arborele creat la punctul a)
6. Prezentați pașii necesari pentru a insera 2 noduri cu valoarea 7 în arborele de mai jos.
Prezentați pașii necesari pentru a șterge cheia 8 din arbore, după ce în prealabil au fost introduse cheile 7 în
arbore.
1
3
2 8

6 9

7. a) Prezentați pații necesari ștergerii nodului cu cheia 30 din arborele de mai jos.
b) Prezentați pașii necesari inserării unui nod cu valoarea 6 fără a șterge nodul cu cheia 30.

8.Verificaţi care dintre arborii de mai jos este Arbore binar de căutare

a) Scrieţi parcurgerile arborelui arborelui sau arborilor găsiți.


b) Descrieţi comparaţiile pe care trebui să le executaţi pentru a insera nodul cu valoarea 15 în arborele de mai
jos.
c) Ştergeţi succesiv în arborele dat cheile 4, 10, 3
9. Pentru un ABC initial vid, se cere:
a) Sa se specifice configuratia dupa insertia cheilor: 40,55,21,50,42,56,10,30,26,1,11,90,75,200 ;
b) respectiv dupa suprimarea fiecareia din cheile: 40,90,30,26,21,55,50,42;
c) Pentru subarborele obtinut dupa ultima stergere de la b), scrieti succesiunea cheilor pentru parcurgerea in
preordine, inordine si postordine.
10. Fiind dat şirul 36, 15, 45, 38, 39, 12, 16 să se construiască prin inserări succesive un ABC.
11. Pentru un ABC iniţial vid, se cere:
a) Sa se specifice configuraţia după inserţia cheilor: 40,55,21,50,42,56,10,30,26,1,11,90,75,99 ;
b) respectiv după suprimarea fiecăreia dintre cheile de mai jos 40,90,30,26,21,55,50,42;
c) Pentru subarborele obţinut după ultima ştergere de la b), scrieţi succesiunea cheilor pentru parcurgerea în
preordine, inordine şi postordine.
12. Care dintre șirurile de valori de mai jos pot fi gradele vârfurilor unui arbore cu 7 noduri?
a) 1,2,3,3,3,3,4 b)1,1,1,1,2,2,4 c)1,1,2,2,2,2,7 d)1,1,1,1,1,3,4
13. Fie arborele cu 8 noduri al carui vector tata este t=(1,2,3,0,5,6,7,8).
a) cate frunze are arborele?
b) considerând nodul 1 ca rădăcină, câte nivele are arborele?
c) construiți vectorii stânga și dreapta
14. Arborele A are vectorul tata=(3,4,0,3,3,5,5,2). Care este înălțimea sa?
a)1 b)2 c)4 d)3
15. Care dintre șirurile de valori de mai jos pot fi gradele vârfurilor unui arbore?
a) 1 1 2 3 3 3 b) 0 1 3 3 3 3 c) 1 1 2 2 3 3 d) 1 1 1 1 2 4
16. Arborele A are vectorul tata=(4 4 7 6 4 0 6 6 ). Care este înălțimea sa?
a)1 b)2 c)4 d)3
17. Fie un arbore binar de înălțime 7. Care este numărul maxim de noduri ale arborelui ? 127, 128, 256 sau 255?
18. Un graf are 100 de noduri si 1000 de muchii.Este acesta un arbore? De ce?
19. Un arbore are 11 noduri frunză. Câte noduri cu exact 2 descendenți are arborele?
20. Un arbore binar este dat prin vectorii stânga și drepata astfel: st=0 0 0 6 7 0 1 3 și dr=0 0 0 5 8 2 0 0 . Care este
rădăcina arborelui? Câte frunze are arborele? Câte nivele există?
21. Știind că radăcina este situată pe nivelul 1 și vectorul de tați este Tata=(4,5,0,3,3,7,3,4,2,9), care dintre nodurile
următoare sunt situate pe niveluri pare?
a) 4 5 7 ; b) 1 8 2 9 c) 10 d) 5 2
22. Pentru care dintre arborii următori, nodurile 5 și 8 sunt descendenți ai nodului 2, știind că arborii au fost memorați cu
ajutorul vectorului de tați.
a) Tata=(4,4,5,0,4,1,2,6) b) Tata=(3,3,0,3,2,1,4,2) c) Tata=(4,5,0,3,3,7,3,4) d) Tata=(0,1,1,2,2,3,5,5)
23. Într-un graf neorientat G, notăm cu n numărul de vârfuri şi cu m numărul de muchii. Dacă graful este un arbore atunci
între n şi m există următoarea relaţie matematică:
a) m=n+2 b) n=m-1 c) n=m+1 d) n=m+2
24. Fie arborele binar dat prin vectorii descendenţilor: st=(2,4,5,0,0,0,0) şi dr=(3,0,6,0,7,0,0).
a) reprezentaţi grafic arborele
b) determinaţi rădăcina arborelui
c) reprezentaţi arborele prin vectorul taţilor
d) parcurgeţi în inordine arborele
e) parcurgeţi în postordine arborele
f) parcurgeţi in preordine arborele
25. Fie arborele binar dat prin vectorii descendenţilor: st=(0,1,4,0,3,0,0) şi dr=(0,7,6,0,2,0,0).
a) reprezentaţi grafic arborele
b) determinaţi rădăcina arborelui
c) reprezentaţi arborele prin vectorul taţilor
d) parcurgeţi în inordine arborele
e) parcurgeţi în postordine arborele
f) parcurgeţi in preordine arborele
26. Fie arborele binar dat prin vectorii descendenţilor: st=(0,4,7,0,0,0,1) şi dr=(0,6,2,0,0,0,5).
a) reprezentaţi grafic arborele
b) determinaţi rădăcina arborelui
c) reprezentaţi arborele prin vectorul taţilor
d) parcurgeţi în inordine arborele
e) parcurgeţi în postordine arborele
f) parcurgeţi in preordine arborele
27. Fie arborele binar dat prin vectorii descendenţilor: st=(4,7,0,0,0,2,0) şi dr=(5,3,0,0,0,1,0).
a) reprezentaţi grafic arborele
b) determinaţi rădăcina arborelui
c) reprezentaţi arborele prin vectorul taţilor
d) parcurgeţi în inordine arborele
e) parcurgeţi în postordine arborele
f) parcurgeţi in preordine arborele
28. Parcurgeţi arborii de mai jos în Preordine, Inordine, Postordine
29. Se consideră un arbore binar cu 8 noduri. Dacă parcurgerea în inordine a arborelui este 7,4,2,1,3,5,6,8 iar parcurgerea
în preordine este 1,2,4,7,3,5,6,8 atunci parcurgerea în postordine este:
a. 7,4,2,1,3,5,6,8 b. 1,2,3,4,5,6,7,8 c. 7,4,2,8,6,5,3,1 d. 8,6,5,3,2,4,7,1
30.Considerăm un arbore binar cu 8 noduri. Dacă parcurgerea în inordine este 4,2,5,7,8,6,1,3 iar parcurgerea în preordine
este 1,2,4,5,6,7,8,3, atunci parcurgerea în postordine este:
a. 4,5,7,8,6,2,3,1 b. 4,8,7,6,5,2,3,1 c. 4,5,8,7,6,2,1,3 d. 8,7,6,5,4,2,3,1
31. Parcurgeţi arborele binar dat prin listele de fii: S=7 4 0 0 2 0 0 0 şi D= 0 1 6 0 3 0 8 0 în inordine şi post ordine.
Reprezentaţi arborele folosind vectori de taţi.
32. Pentru un arbore binar cu n niveluri, numarul maxim de noduri din arbore este:
a) n b) 2*n c) 2n −1 d)2n−1
33. Câte modalitati de parcurgere a unui arbore binar exista ?
a) 3 b) 2 c) 1 d) 4
34.Parcurgerea în postordine presupune:
a) parcurgerea subarborelui stâng, a vârfului, apoi a subarborelui drept
b) parcurgrea vârfului, a subarborelui stâng dupa care a celui drept
c) parcurgerea subarborelui stâng, a subarborelui drept dupa care a vârfului
d) vizitarea radacinii, a nodurilor de pe nivelul 1, a nodurilor de pe nivelul doi etc.

35. Pentru arborele din figura de mai sus, parcuregerea în inordine este:
a) 1 2 3 4 5 6 7 b) 4 2 1 5 7 3 6 c) 1 2 4 3 5 7 6 d) 4 2 7 5 6 3 1
5. Pentru arborele din figura de mai sus, parcuregerea în preordine este:
a) 1 2 3 4 5 6 7 b) 4 2 1 5 7 3 6 c) 1 2 4 3 5 7 6 d) 4 2 7 5 6 3 1
36. Care din urmatoarele variante este o reprezentare cu ajutorul vectorilor pentru arborele de mai sus ?
a) st=[2 4 5 0 0 0 0], dr=[3 0 6 0 7 0 0] b) st=[2 4 0 5 0 0 0], dr=[3 0 0 6 7 0 0]
c) st=[1 2 4 3 5 7 6], dr=[1 3 6 5 7 2 4] d) st=[1 2 3 4 5 6 7], dr=[1 3 2 6 5 4 7]
37. Se consideră graful neorientat reprezentat prin matricea de adiacenţă alăturată; atunci graful este
01110
10101
11000
10001
01010
a. eulerian b. aciclic (nu conţine niciun ciclu) c. arbore d. hamiltonian
38. Care este numărul nodurilor de tip frunză și care este gradul maxim din arborele cu rădăcină, cu 8 noduri, numerotate
de la 1 la 8, reprezentat prin vectorul ”de taţi” (2,0,6,2,4,4,5,5)?
39. Într-un arbore cu rădăcină nivelul unui nod este egal cu lungimea lanţului format din noduri distincte care uneşte
rădăcina cu acel nod. Rădăcina se află pe nivelul 0. Dacă toate frunzele se află pe nivelul 3 şi oricare nod neterminal aflat
pe un nivel k are exact k+1 descendenţi direcţi (fii), care este numărul de noduri din acest arbore ?
a. 8 b. 9 c. 10 d. 6

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