Arbori


 * Arbori cu radacina**

1. Pentru arborele reprezentat prin vectorul “de taţi” T=(6,6,5,0,6,4,4,7), scrieţi care este nodul cu cei mai mulţi fii şi care sunt frunzele arborelui. 2. Câte frunze are arborele cu rădăcină, cu 8 noduri, numerotate de la 1 la 8, descris prin următorul vector ”de taţi”: (6,5,5,2,0,3,3,3)? 3. Într-un arbore cu rădăcină fiecare nod neterminal are exact 2 descendenţi direcţi (fii). Care este numărul de noduri din arbore dacă acesta are 8 frunze?
 * Exercitii**


 * Arbori binari**
 * Exercitii**


 * Ex 1:

1. Sa se scrie frunzele arborelui : 2. Care sunt fii (descendenti directi) nodului 7? 3. Care sunt descendentii nodului 12? 4. Care e inaltimea arborelui? 5. Un lant de lg. max. care pleaca din radacina………… 6. Parcurgere Preordine( RSD) …………………………………………………………… 7. Parcurgere Postordine(SDR) …………………………………………………………… 8. Parcurgere Inordine( SRD) …………………………………………………………… || || Observa desenele alaturate, identificand diferentele dintre arbori / arbori binari si proprietatile arborilor.
 * 2.[[image:d1.png width="284" height="306"]] || Ex 2

Ex 3 Specifica ordinea in care se introduc valorile nodurilor pentru a crea arborele binar din desen (<-) ||


 * Probleme arbori binari**

1. Sa se creeze un arbore binar cu informatiile din noduri citite din fisierul ARBORE.IN a) sa se afiseze arborele in preordine b) sa se determine suma valorilor impare din arbore c) sa se determine inaltimea arborelui d) sa se determine fiii unui nod x, daca exista (cu mesaje: fiu stang, fiu drept) e)sa se verifice daca arborele contine doar valori prime. f) pentru fiecare nod care are exact 2 fii, sa se schimbe informatiile din noduri.

2. a) Sa se copieze un arbore binar b) Sa se copieze un arbore binar in altul, astfel incat fiecare valoare din arborele original sa fie inlocuita cu primul numar prim care o urmeaza.

3. Un arbore binar retine numere intregi.  a) sa se afiseze numerele utilizand una dintre metode.  b) sa se afiseze numerele pare din arbore  c) sa se determine cel mai mare numar din arbore  d) sa se determine suma cifrelor tuturor numerelor din arbore  e) afisati frunzele  f) sa se determine daca exista o anumita valoare in arbore  g) sa se determine daca arborele contine numere prime  h) sa se genereze oglinditul arborelui  i) sa se afiseze subordonatii stangi  j) sa se inlocuiasca o cheie cu o alta  k) sa se inverseze doua chei  l) sa se afiseze fratele lui x  m) sa se afiseze tatal lui x  n) sa se afiseze fii (fiul) lui x  o) sa se determine minimul din arbore <span style="font-family: Arial,Helvetica,sans-serif;"> p) sa se afiseze nodurile cu un singur descendent

4. Sa se verifice daca 2 arbori binari sunt egali.

5. Sa se afiseze nepotii unui nod x si numarul acestora. 6. Sa se afiseze subarborele stang in preordine si subarborele drept in inordine.

6. Se citeste un arbore binar care contine caractere. Se mai citeste o propozitie. Sa se verifice daca propozitia se poate obtine intr-una din cele 3 modalitati de parcurgere a arborelui.

7. Se creeaza un A.B. cu nodurile citite dintr-un fisier text. a) afisati suma valorilor prime din arbore b) afisati nodurile divizibile cu k c) verificati daca nodurile x si y sunt frati d) verificati daca arborele contine cel putin un numar palindrom e) verificati daca la parcurgerea in preordine se obtin valori ordonate strict descrescator.

8. Se creeaza un A.B. cu nodurile citite dintr-un fisier text. a) afisati numarul de valori care au exact 4 divizori b) afisati nodurile palindroame c) verificati daca x este bunicul lui y. d) verificati daca arborele contine doar valori prime. e) construiti un nou arbore, de aceeasi forma cu arborele initial, dar valorile- dublate. (ex: Pentru 1 radacina 2,3 fii se construieste 2 radacina, 4,6 fii)

9. Se creeaza un A.B. cu nodurile citite dintr-un fisier text. a) afisati suma valorilor din arbore care sunt fii stangi. b) afisati val. minima din subarborele stang. c) afisati perechile de frati care sunt tati d) afisati nodurile care sunt formate din exact 3 cifre identice d) construiti oglinditul arborelui.

Clasificarea arborilor binari >
 * arbori binari stricți (orice nod are 0 sau 2 fii)
 * arbori binari plini (fiecare nivel e complet);
 * arbori binari compleți sunt arbori binari care se obţin dintr-un arbore binar plin prin eliminarea din dreapta către stânga a unor noduri de pe ultimul nivel.
 * arbori binari degenerați (n noduri dispuse pe n niveluri);
 * arbori binari echilibrați (pentru orice nod, numărul nodurilor din subarborele drept şi numărul nodurilor din subarborele stâng diferă cu cel mult o unitate)
 * Arbori de cautare**

Arborii se folosesc foarte des pentru memorarea si regasirea rapida a unor informatii. Informatiile memorate intr-un nod al arborelui pot fi date complexe, dar ele contin un camp numit **//cheie//** cu ajutorul caruia se identifica un nod. Din punctul de vedere al operatiilor care se efectueaza intr-un arbore binar de cautare, doar campul cheie este important, de celelalte se poate face abstractie. Intr-un arbore binar de cautare, informatia din nodul radacina este mai mare decat informatiile subarborelui stang si mai mica decat cele ale subarborelui drept si aceasta regula este valabila pentru orice subarbore al sau.


 * Exemplu de arbore binar de cautare:**



Exercitiul 1: Parcurgeti arborele de mai sus in INORDINE. Ce observati?

Vrem sa introducem intr-un arbore de cautare nodurile de mai sus: 5,2,1,3,8,4,9
 * Crearea unui arbore binar de cautare.**

Pas1: se pune 5 in radacina Pas 2: 2 <5 deci se adauga ca fiu stang al lui 5 Pas3: 1<5, se continua cautarea locului lui 1 in subarborele stang, 1<2, se merge acum in stanga lui 2 unde avem un subarbore vid deci acolo se insereaza 1. Pas 4: 3<5, 3>2 deci se adauga in dreapta lui 2. ………….. Exercitiul 2: Creati un arbore de cautare cu aceleasi numere ca mai sus, dar in ordinea: 9,8,5,4,3,2,1

Obs. Daca dorim sa cautam un nod intr-un astfel de arbore, timpul cel mai scurt se obtine daca arborele este echilibrat. O situatie nefavorabila este cea in care nodurile sunt introduse in ordine crescatoare sau descrescatoare (atunci arborele are inaltime maxima). Cum nu cunoastem ordinea in care apar numerele, nu putem sti cum va fi arborele. Constructia arborelui este facuta odata cu operatia de cautare. Prima informatie se pune in radacina, in continuare adaugarea unui nod se face cautandu-i locul in arbore. Nodul va inlocui defapt un subarbore vid, deja existent.

struct nod{int inf; //cheia unui nod se memoreaza in inf// //nod*st,*dr;};//

// Functia de cautare-inserare //

void inserare(nod *&p,int k) { ///adresa nodului se transm. prin referinta// //if (p)// //if (p->inf==k) cout<<"deja exista"<<k<<endl;// //else if (p->inf<k) inserare(p->dr,k);// //else inserare(p->st,k);// //else// / se insereaza nodul intr-un subarbore vid { p=new nod; p->inf=k; p->st=p->dr=NULL;}

} in acest caz functia nu mai returneaza o adresa

int main{ nod * r = NULL, int x; while (cin>>x) inserare(r,x); inordine(r);

<span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Aplicatii:


 * 1) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Construiti arbori binari de cautare pentru fiecare din sirurile de numere de mai jos:

<span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">a) 6,7,3,4,8,2,1,5

<span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">b) 10,8,20,25,12,9,11,34,12,21,22,24


 * 1) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti programul de creare a unui arbore binar de cautare
 * 2) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti o functie care verifica daca o valoare k apare in arbore(returneaza 1 daca apare si 0 daca nu apare). (Se foloseste proprietatea arborelui de cautare pana se gaseste valoarea dorita sau se ajunge la un subarbore vid)
 * 3) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti o functie care calculeaza elementul maxim intr-un arbore de cautare.
 * 4) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti o functie care calculeaza elementul minim intr-un arbore de cautare.
 * 5) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Sa se scrie un program care verifica daca un arbore binar este arbore de cautare. (parcurgem arborele in inordine, retinem intr-un sir elementele si pe urma verificam daca sirul este ordonat crescator)
 * 6) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti o functie care verifica daca o valoare k apare in arbore(returneaza 1 daca apare si 0 daca nu apare). (Se foloseste proprietatea arborelui de cautare pana se gaseste valoarea dorita sau se ajunge la un subarbore vid)
 * 7) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti o functie care calculeaza elementul maxim intr-un arbore de cautare.
 * 8) <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">Scrieti o functie care calculeaza elementul minim intr-un arbore de cautare.


 * Probleme diverse **

1. Din fisierul DATE.IN se citeste un numar n. Daca n este 1, se creeaza un AB, daca n este 2 se creeaza un ABC. a) afisati arborele creat, in inordine b) afisati perechile (tata, fiu dreapta) c) Afisati nodurile de pe nivelul p d) Afisati fratii care sunt numere prietene e) Afisati suma valorilor pare din subarborele drept

2. Se construieste un A.B. cu numere naturale. a) afisati fiecare nod si nivelul acestuia <span style="color: #000000; font-family: 'Times New Roman','serif'; font-size: 14.6667px;">b) afisati suma valorilor de pe un nivel dat

3. Se construieste un ABC cu caractere citite din fisier. ABC va contine literele mici urmate de frecventa acestora. a) afisati litera care apare cel mai des b) afisati literele care nu apar in arbore.

4. Din fisierul DATE.IN se citeste un text. a) Sa se creeze un ABC cu fiecare cuvat din text. Fiecare cuvat apare o singura data. b) Sa se afiseze cuvintele in ordine alfabetica.

5. Din fisierul DATE.IN se citesc 2 numere: x si y. Sa se creeze 2 ABC cu cifrele fiecarui numar. Cifrele care se repeta nu se adauga in arbori. a) Sa se afiseze fiecare arbore in INORDINE b) Sa se verifice daca cifra minima din x este aceeasi cu cifra minima din y c) Sa se afiseze pe ce nivel in arborele asociat lui x se gaseste informatia din radacina arborelui asociat lui y d) Sa se verifice, folosind arborii creati, daca x si y sunt formati din aceleasi cifre e) Sa se verifice daca numarul x este format doar din cifre pare

6.Verificati daca un AB este: strict /plin/ degenerat/echilibrat

7. Din fisierul DATE.IN se citesc numere naturale care se memoreaza intr-un arbore binar a) afisati valorile din subarborele stang care sunt nr. Niven b) afisati numerele triangulare care apar in subarborele stang al nodului k  a) creati un ABC cu valorile din arbore care sunt elemente ale sirului lui Fibonaci (1,1,2, 3,5,8,13,...)  b) afisati ABC in inordine

nr Niven: 2210 divizibil cu (2+2+1+0) nr triangular: 10=1+2+3+4, 15,21...

8. Se citesc din fisierul DATE.IN numere naturale. Sa se creeze un ABC cu cifrele distincte din toate numerele si frecventa lor de aparitie.. a) afisati arborele in inordine b) verificati daca o cifra c apare in arbore si daca da, afisati toate cifrele mai mari decat ea din arbore (parcurgand subarborele drept al acesteia) c) afisati subarborele stang al radacinii, daca informatia din radacina e para. Altfel, afisati subarborele drept. d) afisati toate nodurile de pe nivelul N, care au frecventa F  e)verificati daca 2 cifre c1 si c2 se repeta de acelasi numar de ori  f)verificati daca 2 cifre c1 si c2 sunt frati g)verificati daca arborele e strict/degenerat h)afisati numarul de descendenti ai unui nod cu informatia c1  i) afisati numarul de cifre din toate numerele din fisier (suma valorilor din campul de frecvente)  j) afisati media aritmetica a cifrelor numerelor (se foloseste campul de frecvente)

9. Se citesc numere din fisierul date.in care se memoreaza intr-un AB. a) verificati daca toate numerele din arbore sunt prime b) afisati numerele din arbore care au prima cifra egala cu ultima c) afisati inaltimea arborelui d) verificati daca in parcurgerea in preordine valorile sunt ordonate crescator e) verificati daca arborele e echilbrat ( diferenta dintre inaltimile a 2 subarbori e 0 sau 1) f) construiti un arbore binar cu aceeasi forma, dar un nod sa contina radacina intreaga a nodului corespunzator din arborele initial.