Parcurgerea arborilor binari şi aplicaţii

Similar documents
GRAFURI NEORIENTATE. 1. Notiunea de graf neorientat

VISUAL FOX PRO VIDEOFORMATE ŞI RAPOARTE. Se deschide proiectul Documents->Forms->Form Wizard->One-to-many Form Wizard

Modalităţi de redare a conţinutului 3D prin intermediul unui proiector BenQ:

Ghid de instalare pentru program NPD RO

22METS. 2. In the pattern below, which number belongs in the box? 0,5,4,9,8,13,12,17,16, A 15 B 19 C 20 D 21

SUBIECTE CONCURS ADMITERE TEST GRILĂ DE VERIFICARE A CUNOŞTINŢELOR FILIERA DIRECTĂ VARIANTA 1


Pasul 2. Desaturaţi imaginea. image>adjustments>desaturate sau Ctrl+Shift+I

declarare var <identif>:array[<tip1>,<tip2>,...] of <tip_e>; var a: array[1..20] of integer; (vector cu 20 elemente)

6. MPEG2. Prezentare. Cerinţe principale:

Application form for the 2015/2016 auditions for THE EUROPEAN UNION YOUTH ORCHESTRA (EUYO)

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

PROBLEME DE TEORIA NUMERELOR LA CONCURSURI ŞI OLIMPIADE

Conferinţa Naţională de Învăţământ Virtual, ediţia a IV-a, Graph Magics. Dumitru Ciubatîi Universitatea din Bucureşti,

Split Screen Specifications

Exerciţii Capitolul 4

Click pe More options sub simbolul telefon (în centru spre stânga) dacă sistemul nu a fost deja configurat.

Teoreme de Analiză Matematică - II (teorema Borel - Lebesgue) 1

4 Caracteristici numerice ale variabilelor aleatoare: media şi dispersia

Algoritmică şi programare Laborator 3

Aplicatii ale programarii grafice in experimentele de FIZICĂ

2. PORŢI LOGICE ( )

Circuite Basculante Bistabile

Split Screen Specifications

Un tip de data este caracterizat de: o O mulţime de date (valori є domeniului) o O mulţime de operaţii o Un identificator.

Sistemul de operare Windows (95, 98) Componenta My Computer

DIRECTIVA HABITATE Prezentare generală. Directiva 92/43 a CE din 21 Mai 1992

Rigla şi compasul. Gabriel POPA 1

Press review. Monitorizare presa. Programul de responsabilitate sociala. Lumea ta? Curata! TIMISOARA Page1

LESSON FOURTEEN

Universitatea din Bucureşti. Facultatea de Matematică şi Informatică. Şcoala Doctorală de Matematică. Teză de Doctorat

Ghidul administratorului de sistem

ARHITECTURA CALCULATOARELOR 2003/2004 CURSUL 10

ANCA-MARIANA PEGULESCU Ministery of National Education

Hama Telecomanda Universala l in l

TTX260 investiţie cu cost redus, performanţă bună

Mail Moldtelecom. Microsoft Outlook Google Android Thunderbird Microsoft Outlook

JOURNAL OF ROMANIAN LITERARY STUDIES DO ASSERTIONS, QUESTIONS OR WISHES MAKE A THICK TRANSLATION?

12.Paralelă între stocarea datelor pe suporturi magnetice şi optice şi transmisia serială

OLIMPIADA DE MATEMATIC ¼A ETAPA JUDEŢEAN ¼A 3 martie 2007

9.1. Structura unităţii de I/E. În Figura 9.1 se prezintă structura unui sistem de calcul împreună cu unitatea

3. CPU 3.1. Setul de regiştri. Copyright Paul GASNER

Maria plays basketball. We live in Australia.

Poo Laboratoare 1. Laborator Programare cu JTable & JTree JTable JTree... 2

OLIMPIADA INTERNAŢIONALĂ DE MATEMATICĂ FORMULA OF UNITY / THE THIRD MILLENIUM 2014/2015 RUNDA A DOUA

O VARIANTĂ DISCRETĂ A TEOREMEI VALORII INTERMEDIARE

Cum putem folosi întregii algebrici în matematica elementară

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Matematică (Varianta 4) b este: A b 2 a B b a C b+ a D a b

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Matematică (Varianta 1)

Biostatistică Medicină Generală. Lucrarea de laborator Nr Intervale de încredere. Scop: la sfârşitul laboratorului veţi şti:

DEMONSTRAREA CONCURENŢEI ŞI COLINIARITĂŢII UTILIZÂND METODA FASCICULELOR CONVERGENTE NECULAI STANCIU 1

ZOOLOGY AND IDIOMATIC EXPRESSIONS

231C5. RO Manualul de utilizare 1

PREZENTARE INTERFAŢĂ MICROSOFT EXCEL 2007

Reprezentări grafice

ARHITECTURA SISTEMELOR DE CALCUL ŞI SISTEME DE OPERARE. LUCRĂRILE DE LABORATOR Nr. 12, 13 şi 14

OPTIMIZAREA GRADULUI DE ÎNCĂRCARE AL UTILAJELOR DE FABRICAŢIE OPTIMIZING THE MANUFACTURING EQUIPMENTS LOAD FACTOR

10 Estimarea parametrilor: intervale de încredere

MODULUL 2 UTILIZAREA SISTEMULUI DE OPERARE WINDOWS XP CURSUL UTILIZAREA CALCULATORULUI PERSONAL; APLICAREA TIC ÎN ŞCOALĂ ŞI AFACERI

Consideraţii statistice Software statistic

1. Funcţii speciale. 1.1 Introducere

GREUTATE INALTIME IMC TAS TAD GLICEMIE

Paradoxuri matematice 1

1. Ecuaţii diferenţiale de ordinul întâi

Evoluţii în domeniul protecţiei persoanelor cu handicap, la 30 septembrie 2010

Introducere De ce această carte?... 8 Eficienţă maximă... 8 Scurt Istoric... 9 De ce C#? Capitolul I : Să ne pregătim...

Biraportul în geometria triunghiului 1

De ce calcul paralel?

Analele Universităţii Constantin Brâncuşi din Târgu Jiu, Seria Inginerie, Nr. 4/2011

SISTEMUL INFORMATIONAL-INFORMATIC PENTRU FIRMA DE CONSTRUCTII

Paraclisul Preasfintei Nascatoarei de Dumnezeu

riptografie şi Securitate

Colors. He tries to see everything in black and white although he knows this is impossible.

In Search of Cultural Universals: Translation Universals. Case Studies

EPI INFO. - Cross-tabulation şi testul 2 -

Manual de utilizare. Oricând aici pentru a vă ajuta HMP5000. Întrebare? Contactaţi Philips

12. Paralelă între stocarea datelor pe suporturi magnetice şi optice şi transmisia serială

BAZE DE DATE SI PRELUCRARI STATISTICE

RULMENŢI. TIPURI CONSTRUCTIVE. MONTARE ŞI DEMONTARE. 1. Scopul lucrării Tipurile constructive de rulmenţi. Montarea şi demontarea rulmenţilor.

Curriculum vitae Europass

2.Transferul de date. Transferul de date

Sistemul de semnalizare SS7. Petre Ogruţan, ianuarie 2015

Tehnologia Informaţiei şi a Comunicaţiilor


Clasele de asigurare. Legea 237/2015 Anexa nr. 1

Capitolul 1. Noţiuni de bază

ABORDAREA STRATEGICĂ A MARKETINGULUI INTEGRAT. Strategic Opportunities Afforded by Integrated Marketing

ACADEMIA DE STUDII ECONOMICE FACULTATEA DE FINANŢE, ASIGURĂRI, BĂNCI şi BURSE de VALORI

Anexa nr.1. contul 184 Active financiare depreciate la recunoașterea inițială. 1/81

Microsoft Excel partea 1

Structura sistemelor de operare Windows şi Linux

O VARIANTĂ REDUSĂ A SCALELOR DE DEPRESIE, ANXIETATE ŞI STRES (DASS)

CURS Nivele de management al SAN Nivelul de stocare *I LTO Tape Library Specialist

SOCIOLOGIE ORGANIZATIONALA

OLIMPIADA INTERNAŢIONALĂ DE MATEMATICĂ FORMULA OF UNITY / THE THIRD MILLENIUM 2014/2015 RUNDA A DOUA ADDENDUM

MANUAL DE INSTRUCTIUNI AD 70H

Manual de utilizare 43PUS PUS PUS6551

Capitolul 5. Elemente de teoria probabilităţilor

Europass Curriculum Vitae

Metode de căutare neinformată şi informată

Transcription:

Parcurgerea arborilor binari şi aplicaţii Un arbore binar este un arbore în care fiecare nod are gradul cel mult 2, adică fiecare nod are cel mult 2 fii. Arborii binari au şi o definiţie recursivă : - un arbore binar este fie vid, fie format dintr-o rădăcină R şi doi subarbori, numiţi subarbore stâng S şi respectiv subarbore drept D. Se face întotdeauna o distincţie clară între cei doi subarbori. Dacă subarborele stâng S este nevid, rădăcina lui se numeşte fiul stâng al rădăcinii R. Analog, dacă subarborele drept D este nevid, rădăcina lui este fiul drept al rădăcinii R. Parcurgerile arborilor binari sunt cele mai frecvente operaţii utilizate pe arbori. Parcurgerea unui arbore înseamnă vizitarea fiecărui nod al arborelui o singură dată, cu scopul prelucrării informaţiei memorate în acel nod. Dintre cele mai utilizate parcurgeri sunt parcurgerile în adâncime (algoritmul DFS) şi pe niveluri (algoritmul BFS). A. Parcurgeri în adâncime sunt parcurgerile în preordine, inordine şi postordine. În toate cele trei tipuri de parcurgere în adâncime se vizitează prima dată subarborele stâng şi apoi subarborele drept, iar diferenţa constă în momentul în care se vizitează rădăcina. Funcţiile de parcurgere pot fi scrise recursiv sau iterativ, folosind o stivă. n 1 2 3 4 5 6 S 2 4 6 0 0 0 D 3 5 0 0 0 0 Parcurgerea în preordine RSD se vizitează mai întâi rădăcina R, apoi se parcurge în preordine subarborele stâng S şi subarborele drept D. Pentru arborele din figură, şirul parcurgerii RSD este: 1 2 4 5 3 6. Parcurgerea în inordine SRD se parcurge mai întâi în inordine suarborele stâng S, apoi rădăcina R, apoi se parcurge în inordine subarborele drept D. Pentru arborele din figură, şirul parcurgerii SRD este: 4 2 5 1 6 3. Parcurgerea în postordine SDR se parcurg în postordine subarborele stâng S şi subarborele drept D, iar apoi se vizitează rădăcina R. Pentru arborele din figură, şirul parcurgerii RSD este: 4 5 2 6 3 1. B. Parcurgerea pe niveluri se vizitează rădăcina, apoi toţi fii nodului rădăcină, de la stânga spre dreapta şi se continuă în acest mod pe toate nivelurile. Pentru arborele din figură, şirul parcurgerii pe niveluri este: 1 2 3 4 5 6.

Parcurgerile arborilor binari 1. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Afişaţi pe ecran şirurile parcurgerilor RSD, SRD şi SDR ale arborelui citit. RSD: 1 2 4 5 6 3 7 8 SRD: 4 2 5 6 1 7 3 8 SDR: 4 6 5 2 7 8 3 1 7. ifstream f(""); 13. void RSD(int p) 14. { 15. if(p>0) 16. 17. { cout<<p<<' '; 18. RSD(St[p]); 19. RSD(Dr[p]); 20. } 21. } 22. void SRD(int p) 23. { 24. if(p>0) 25. { 26. SRD(St[p]); 27. cout<<p<<' '; 28. SRD(Dr[p]); 29. } 30. 31. } 32. void SDR(int p) 33. { 34. if(p>0) 35. {SDR(St[p]); 36. SDR(Dr[p]); 37. cout<<p<<' ';} 38. 39. } 40. int main() 41. { 42. citire(); 43. cout<<"rsd: "; 44. RSD(R); 45. cout<<endl; 46. cout<<"srd: "; 47. SRD(R); 48. cout<<endl; 49. cout<<"sdr: "; 50. SDR(R); 51. }

Vectorul de taţi 2. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Afişaţi pe ecran vectorul de taţi al arborelui citit. 0 1 1 2 2 5 3 3 4. int i,n,st[101],r,dr[101],t[101]; 7. ifstream f(""); 13. 14. void tati(int x,int p) 15. { 16. if(x>0) 17. { 18. T[x]=p; 19. tati(st[x],x); 20. tati(dr[x],x); 21. } 22. } 23. 24. void tipar() 25. { 26. int i; 27. cout<<n<<' '<<R<<'\n'; 28. for(i=1;i<=n;i++) 29. cout<<t[i]<<' '; 30. } 31. 32. int main() 33. { 34. citire(); 35. tati(r,0); 36. tipar(); 37. }

Lista nodurilorarborelui 3. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Afişaţi pe ecran lista nodurilor terninale, lista nodurilor cu un singur fiu şi lista nodurilor care au exact doi fii. Noduri terminale (frunze): 4 6 7 8 Noduri cu un fiu: 5 Noduri cu doi fii: 1 2 3 7. ifstream f(""); 13. 14. void fii(int p,int k) 15. { 16. int f=0; 17. if(p>0) 18. { 19. if(st[p]>0) f++; 20. if(dr[p]>0) f++; 21. if(f==k) cout<<p<<' '; 22. fii(st[p],k); 23. fii(dr[p],k); 24. } 25. } 26. 27. int main() 28. { 29. citire(); 30. cout<<"noduri terminale (frunze): "; 31. fii(r,0); 32. cout<<'\n'; 33. 34. cout<<"noduri cu un fiu: "; 35. fii(r,1); 36. cout<<'\n'; 37. 38. cout<<"noduri cu doi fii: "; 39. fii(r,2); 40. }

Numărul nodurilor 4. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Afişaţi pe ecran numărul nodurilor terninale, numărul nodurilor cu un singur fiu şi numărul nodurilor care au exact doi fii. Noduri terminale (frunze): 4 Noduri cu un fiu: 1 Noduri cu doi fii: 3 7. ifstream f(""); 13. 14. int fii(int p,int k) 15. { 16. int f=0; 17. if(p>0) 18. { 19. if(st[p]>0) f++; 20. if(dr[p]>0) f++; 21. if(f==k) 22. return 1+fii(St[p],k)+fii(Dr[p],k); 23. else 24. return fii(st[p],k)+fii(dr[p],k); 25. } 26. } 27. 28. int main() 29. { 30. citire(); 31. cout<<"noduri terminale (frunze): "<<fii(r,0); 32. cout<<'\n'; 33. 34. cout<<"noduri cu un fiu: "<<fii(r,1); 35. cout<<'\n'; 36. 37. cout<<"noduri cu doi fii: "<<fii(r,2); 38. }

Înălţimea unui arbore binar 5. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Afişaţi înălţimea arborelui binar citit. Inaltimea arborelui: 3 5. 6. void citire() 7. { 8. ifstream f(""); 9. f>>n>>r; 10. for(i=1;i<=n;i++) f>>st[i]; 11. for(i=1;i<=n;i++) f>>dr[i]; 12. f.close(); 13. } 14. 15. int h(int p, int k) 1 17. int a,b; 18. if((st[p]==0)&&(dr[p]==0)) return k; 19. else 20. { 21. a=h(st[p],k+1); 22. b=h(dr[p],k+1); 23. if(a>b) return a; 24. else return b; 25. } 26. } 27. 28. int main() 29. { 30. citire(); 31. cout<<"inaltimea arborelui: "<<h(r,0); 32. }

Arbore binar strict 6. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Verificaţi dacă arborele citit este un arbore binar strict, adică fiecare nod are 0 sau 2 noduri fii. Nu este arbore binar strict 7. ifstream f(""); 13. 14. int fii(int p,int k) 15. { 16. int f=0; 17. if(p>0) 18. { 19. if(st[p]>0) f++; 20. if(dr[p]>0) f++; 21. if(f==k) 22. return 1+fii(St[p],k)+fii(Dr[p],k); 23. else 24. return fii(st[p],k)+fii(dr[p],k); 25. } 26. else return 0; 27. } 28. 29. int main() 30. { 31. citire(); 32. if(fii(r,1)==0) 33. cout<<"arbore binar strict"; 34. else 35. cout<<"nu este arbore binar strict"; 36. }

Arbore echilibrat 7. Se citesc din fisierul de pe prima linie două numere n şi R reprezentând numărul de Verificaţi dacă arborele citit este un arbore binar echilibrat. Un arbore este echilibrat dacă diferenţa dintre înălţimea oricăror doi subarbori este 0 sau 1. Arborele este echilibrat 3. #include<cmath> 4. using namespace std; 5. int i,n,st[101],r,dr[101],ok=1; 6. 7. void citire() 8. { 9. ifstream f(""); 10. f>>n>>r; 11. for(i=1;i<=n;i++) f>>st[i]; 12. for(i=1;i<=n;i++) f>>dr[i]; 13. f.close(); 14. } 15. 16. int h(int p, int k) 17. { 18. int a,b; 19. if((st[p]==0)&&(dr[p]==0)) return k; 20. else 21. { 22. a=h(st[p],k+1); 23. b=h(dr[p],k+1); 24. if(abs(a-b)>1) ok=0; 25. if(a>b) return a; 26. else return b; 27. } 28. } 29. 30. int main() 31. { 32. citire(); 33. h(r,0); 34. if(ok==1) 35. cout<<"arborele este echilibrat"; 36. else 37. cout<<"arborele nu este echilibrat"; 38. }