Sunteți pe pagina 1din 74

Alin Zamfiroiu

alin.zamfiroiu@csie.ase.ro
 Arbori binari
 Arbori AVL
 Tabele de dispersie
 Heap
 Structura tara si nod
 Creare nod
 Inserare
 Parcurgere si afisare
 Numarul de nivele
 Afisare de pe un nivel
 Cautare nod
 Stergere
http://www.bluesharktutorials.com/
 Pentru crearea unui nod se primesc cele trei
informatii necesare: informatia, nodul din
stanga si nodul din dreapta.
http://www.cs.cmu.edu/
 Preordine  RSD;
 Inordine  SRD;
 Postordine SDR.
 Pentru determinarea numarului de niveluri se
calculeaza numarul de niveluri pentru fiecare
subarbore si se determina maximul dintre
acestea, la care se adauga valoarea 1.
 Se furnizeaza ca si parametrii: radacina
arborelui, nivelul de pe care dorim sa afisam
informatiile si nivelul aferent radacinii (nivel 1).

 La fiecare apel atat pentru subarborele stang


cat si pentru subarborele drept nivelul curent
creste cu o unitate.

 Atunci cand cele doua niveluri sunt egale, se


afiseaza informatiile din nodul respectiv.
 Pentru cautare se furnizeaza radacina
arborelui si codul tarii de cautat sau tara ce
este cautata.

 Cautarea se face dupa id-ul tarii deoarece


arborele este sortat dupa acest id.
http://www.cs.cmu.edu/
http://www.cs.cmu.edu/
 Structura domeniu
 Arbori binari
 Inserare arbore binar
 Numarul de nivele al unui arbore
 Parcurgere arbore binar
 Arbori binari echilibrati
 Moduri de echilibrare
 Se creeaza si structura pentru un nod al unui
arbore binar.
 Se implementeaza metoda de inserare a unui
nod intr-un arbore binar de cautare.
 Se implementeaza metoda de determinare a
inaltimii unui arbore sau a numarului de nivele
 Se implementeaza metoda de parcurgere in
preordine a arborelui binar de cautare.

https://www.rtmath.net/
http://users.informatik.uni-halle.de/

http://pages.cs.wisc.edu/
http://www.ambesty.com/
http://4spills.blogspot.ro/ http://www.sparknotes.com/
 Se creeaza o structura
pentru un vagon cu cod si
tipul vagonului.

 Informatia de tip vagon este


informatia dintr-un nod de
tip lista.

 Tabelele de dispersie sunt


reprezentate de un vector
(pointer) de liste (nod*).
 Sa se scrie functia care creaza si returneaza
un HashStruct:

 Se seteaza dimensiunea acestuia;

 Se aloca spatiu pentru vectorul de liste;

 Se initializeaza toate listele cu NULL;

 Se returneaza noua structura creata.


 Sa se scrie functia de generare a codului hash.

 Functia primeste codul pentru care trebuie sa


genereze hash-ul si structura de tip
HashStruct pentru obtinerea dimensiunii.
http://ciscodocuments.blogspot.ro/
 Functia de inserare primeste ca parametrii
structura hash in care se insereaza si
elementul de tip vagon care urmeaza a fi
inserat.
 Aceasta returneaza pozitia pe care este
inserat elementul.
 Pozitia se determina cu ajutorul functiei hash.
 Se creeaza noul nod, si se insereaza la pozitia
determinata. Daca exista deja cel putin un
nod la acea pozitie vom realiza inserare la
sfarsitul listei.
 Ca sa avem ce sa inseram, creeam functia de
citire a unui vagon dintr-un fisier.
 Functia primeste ca si parametru fisierul din
care citeste si returneaza un vagon.
 Pentru citire din fisier se foloseste functia
fscanf(File file, char* format,…), caruia i se
specifica fisierul din care citeste.
 Pentru parcurgerea intregii structuri, se
parcurge mai intai vectorul si apoi in cazul in
care exista lista la pozitia curenta, atunci se
parcurge lista si se afiseaza.

 Afisarea se poate face inline sau prin apelul


unei functii care va afisa la consola.

 Se poate face si scrierea in fisier. Fisierul se


deschide cu “w” pentru scriere si se scrie cu
functia fprintf(File file, char* format,…).
 Functia pentru cautare in structura dupa cod.

 Functia primeste ca parametri codul vagonului de


cautat si structura in care face cautarea.

 Asemanator procesului de inserare se determina


valoarea hash a codului de cautat si apoi se cauta
la pozitia indicata de pozitia obtinuta din codul
hash.

 Daca nu exista se returneaza un vagon cu codul


egal cu -1.
 Pentru stergere se parcurge vectorul si se
sterg mai intai nodurile respectiv listele.

 Dupa stergerea tuturor nodurilor se sterge si


vectorul de elemente din cadrul structurii.

 Pentru stererea nodurilor se face o functie


care sterge recursiv nodurile listei.
 Arbore binar – de obicei

 Cozi de prioritate
 Implementare algoritmi de selecție
 Citirea datelor: 5, 12, 8, 6, 18, 7.
 Le citim într-un vector normal:

0 1 2 3 4 5
5 12 8 6 18 7

 Cum arata datele într-un arbore?


 N 5

 2*N+1
 2*N+2
12 8

6 18 87

0 1 2 3 4 5
5 12 8 6 18 7
 Filtrarea se face incepand cu pozitia [(N-1)/2] și
terminând cu rădăcina: poziția 0;
 In cazul nostru avem 6 noduri pozitia 2;

 Filtrarea presupune asezarea nodurilor din


arbore astfel incat să respecte anumite conditii:
 MAX-heap: valoarea dintr-un nod este mai
mare decât valorile din fii acestui nod.
 ATENTIE!!!!: nu este arbore binar de căutare –
nu contează ordinea nodurilor fiu.

12 12

10 11
11 10
 min-heap: valoarea dintr-un nod este mai
mică decât valorile din fii acestui nod.

12 11
 Metoda de filtrare trebuie sa verifice daca
nodul primit ca parametru verifica conditiile
de MAX-heap.
 În cazul în care condiția nu este verificată,
valorile sunt interschimbate.
5 5

12 8 12 87

6 18 87 6 18 8
 În cazul unei interschimbări se apelează
metoda de filtrare după nodul care a fost
schimbat – doar dacă poziția acestuia este
mai mică decât [(N-1)/2].
 Pozitia nodului de verificat este decrementată.
 Se verifica daca exista un fiu cu valoarea mai
mare.
 Daca exista se face interschimbarea.

5 5

18 87
12 87

6 18
6 12 8
8
 Pozitia este iar decrementată.
 Se repetă procesul.

5 87

18 87 18 5

6 12 8 6 12 8
 Deoarece pozitia maximului a fost identificat
la pozitia 2, care respectă conditia ca este
mai mic sau egal cu [(N-1)/2](2<=2), se
reaia procesul pentru aceasta pozitie:

87 87

18 5 18 8

6 12 8 6 12 5
 Ce presupune a filtra pentru min-HEAP ??
 Trebuie să alocăm spațiu pentru un element
în plus, în vectorul în care gestionăm heap-ul
nostru.

 Adăugăm noua valoare pe ultima poziție

0 1 2 3 4 5
87 18 8 6 12 5

 Unde este adăugat in arbore ???


 Ce trebuie făcut după ce a fost adăugat un
nou nod ??
87

18 8

6 12 5 17
 Se apelează metoda de filtrare pentru poziția
[(N-1)/2]. Acum avem 7 elemente in vector.
Se apelează pentru pozitia 3.

87

18 8

6 12 5 17
 Se continuă cu pozitia 2 unde trebuie
realizata o interschimbare.

87 87

18 8 18 17

6 12 5 17 6 12 5 8
 Se continuă cu pozitia 1 și pozitia 0.
 Arborele respectă condițiile de MAX-heap.

87 87

18 17 18 17

6 12 5 8 6 12 5 8
 De obicei dintr-un heap se extrage rădăcina
acestuia deoarece se stie ca este maximul din
acel heap.
 Cum vom face acest lucru pe vectorul pe care
lucram noi ?
87

18 17

6 12 5 8
 Se salveaza primul element pentru returnare;
 Se inverseaza primul element cu ultimul
element din cadrul vectorului.
0 1 2 3 4 5 6 0 1 2 3 4 5 6

87 18 17 6 12 5 8 8 18 17 6 12 5 87

87
Elem=87 8

18 17
18 17

6 12 5 8 6 12 5 87
 Acum se pune problema ștergerii ultimului
element din vector.
 Acest lucru se face prin alocarea de spațiu
pentru un vector cu un element mai puțin și
copierea primelor N-1 elemente.
 Se reduce si dimensiunea vectorului.
 Cum arată arborele?
0 1 2 3 4 5 6

8 18 17 6 12 5 87

0 1 2 3 4 5

8 18 17 6 12 5
 Respectă regulile de MAX-HEAP ?

 Se apelează metoda de filtrare asemănător ca


la inserare, începând cu poziția [(N-1)/2].
8

 Acum N=6pozitie=2.
18 17

6 12 5
 Pentru poziția 2 și poziția 1, arborele
respectă condițiile de MAX-heap.

8
8

18 17
18 17

6 12 5
6 12 5
 Pentru poziția 0 este identificat un fiu cu
valoarea mai mare și se realizează
interschimbarea. Se reapelează metoda de
filtrare.
8
18

18 17
8 17

6 12 5
6 12 5
 Si in această poziție este identificat un fiu cu
valoarea mai mare.

18 18

8 17 12 17

6 12 5 6 8 5
 După această interschimbare heap-ul nostru
respectă condițiile de MAX-Heap.

18

12 17

6 8 5
 Afișare: se parcurge vectorul și se afișează.

 Ce fel de parcurgere a arborelui este realizata?


 Deoarece la toate funcțiile folosim vectorul și
dimensiunea, am putea să facem o structură
cu cele două.
 Această structură este structura HEAP.

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