Documente Academic
Documente Profesional
Documente Cultură
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
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