Download presentation
Presentation is loading. Please wait.
1
ARBORI BINARI DE CĂUTARE
Proiect realizat de micu ana
2
DEFINIȚIE Arborii binari de căutare sunt arbori binari cu proprietatea că există o relație de ordine definită pe valorile asociate fiecărui nod, iar pentru fiecare nod, subarborele stâng conține valori mai mici decât cea a nodului, iar cel drept conține valori mai mari decât cea a nodului. Utilizarea cea mai importantă a lor este în dicționare, folosind o cheie de sortare (cheie de căutare).
3
Exemplu: Rădăcina (20) are ca fii pe 13 în stânga sa (13 < 20) și pe 45 în dreapta sa (45 > 20). La rândul lor, 13 și 45 au aceeași proprietate: în stânga lui 13 este 5 și în dreapta 17, iar în stânga lui 45 este 33 și în dreapta este 90.
4
aRBOrII BINARI DE CĂUTARE IMPLementează eficient următoarele operații:
căutare(arbore, k) – determină dacă un element specificat prin cheia de sortare k există în arbore și-l returnează dacă există. inserție(arbore, x) - inserează în arbore elementul x. ștergere(arbore, k) - șterge un element specificat prin cheia k. listare – parcurgerea arborelui binar de căutare
5
Crearea arborilor de căutare se realizează aplicând de un număr de ori operația de inserare, realizată astfel: -se compară valoarea k de inserat cu cheia asociată nodului curent. Există următoarele posibilități: - cheia coincide cu valoarea de inserat și se renuntă la inserare - cheia este mai mică decât k caz în care se încearcă inserarea în subarborele drept - cheia este mai mare decât k caz în care se incearcă inserarea în subarborele stâng inserarea propriu-zisă se realizează atunci când subarborele stâng , respectiv drept, este vid, altfel se reia. Mecanismul descris este tipic metodei Divide et Impera. INSERAREA
6
Inițial nu avem niciun nod.
Luăm primul nod, cu valoarea 13, și îl punem în arbore ca fiind rădăcina. 13 Următoarea valoare pe care dorim să o punem este 59. Vedem că 59 > 13, deci îl adăugăm în dreapta sa. 12 59 Următoarea cheie introdusă este 92. Parcurgând arborele, observăm că 92 > 13, deci va fi în dreapta sa, dar și 92 > 59. Cum 59 nu mai are alți fii, îl adăugăm în dreapta sa. 36 92 Se introduce cheia > 13, 62 > 59, dar 62 < 92, așa că va fi situată în stânga lui 92. 62 68 Pentru cheia 68, verificăm 68>13, >59, <92, >62, deci o punem în dreapta lui 62. Se introduce 12, și ajunge imediat în stânga lui 13, fiind mai mic decât acesta. INSERAREA La introducerea cheii 36, mergem în dreapta lui 13, dar cum 36 < 59, îl situăm în stânga lui.
7
CĂUTAREA 13 Să presupunem că vrem să căutăm cheia 62. Parcurgerea este mult mai ușoară datorită criteriului de plasare al cheilor în funcție de valoarea reținută. Odată creat, un arbore de căutare permite regăsirea mai rapidă a informației decât în cazul în care ar fi memorate secvențial. Numărul de comparații este mai mic sau egal cu numărul de niveluri ale arborelui de căutare. Dacă în procesul de căutare s-a ajuns să se caute cheia într-un subarbore vid, înseamnă că nodul cu cheia respectivă lipsește. 12 59 36 92 62 68
8
ȘTERGEREA 1 Exemplu 1: vrem să ștergem cheia 46. 22 13 46 51 72
Pentru a șterge un nod din arbore, atâta timp cât acesta nu e frunză, vor fi necesare și alte modificări astfel încât condiția de arbore de căutare să nu fie încălcată. Se disting două cazuri: Dacă nodul șters are un singur fiu Dacă nodul șters are doi fii Pentru primul caz, nodul șters este înlocuit cu singurul său fiu. 1 Exemplu 1: vrem să ștergem cheia 46. 22 13 46 51 72
9
ȘTERGEREA 1 Exemplu 2: vrem să ștergem cheia 22. 22 13 46 51 72
Pentru a șterge un nod din arbore, atâta timp cât acesta nu e frunză, vor fi necesare și alte modificări astfel încât condiția de arbore de căutare să nu fie încălcată. Se disting două cazuri: Dacă nodul șters are un singur fiu Dacă nodul șters are doi fii Pentru primul caz, nodul șters este înlocuit cu singurul său fiu. Pentru al doilea caz, nodul șters va fi înlocuit cu cel mai mare nod din subarborele stâng. 1 Exemplu 2: vrem să ștergem cheia 22. 22 13 46 51 72
10
Listarea este parcurgerea în inordine a arborelui binar de căutare.
13 12 59 36 92 62 68 12 13 36 59 68 62 92 LISTAREA
11
IMPLEMENTARE C++ #include <iostream> using namespace std; struct Nod { int info; Nod *st, *dr; }; Nod* root; void init(Nod* &root){ root = NULL; } Nod* &find(Nod* &p, int x){ if (p == NULL || p -> info == x) return p; if (x <= p -> info) return find(p -> st, x); return find(p -> dr, x);
12
IMPLEMENTARE C++ Nod* &minim(Nod* &p){ if (p -> st == NULL) return p; return minim(p -> st); } Nod* &maxim(Nod* &p){ if (p -> dr == NULL) return maxim(p -> dr); void insert(Nod* &p, int x){ if (p == NULL) { p = new Nod; p -> info = x; p -> st = p -> dr = NULL; return; if (x <= p -> info) insert(p -> st, x); else insert(p -> dr, x);
13
IMPLEMENTARE C++ void erase(Nod* &root, int x){ Nod* &p = find(root, x); if (p -> st == NULL || p -> dr == NULL){ Nod* aux = p -> st; if (p -> st == NULL) aux = p -> dr; delete p; p = aux; return; } Nod* &q = maxim(p -> st); p -> info = q -> info; delete q; void print(Nod* &p){ if (p == NULL) print(p -> st); cout << p -> info << " "; print(p -> dr);
14
IMPLEMENTARE C++ int main() { char c; int x; while (true) { cin >> c; if (c != 'm' && c != 'M' && c != 'P') cin >> x; if (c == 'I') insert(root, x); if (c == 'E') erase(root, x); if (c == 'F') cout << (find(root, x) != NULL) << "\n"; if (c == 'm') cout << minim(root) -> info << "\n"; if (c == 'M') cout << maxim(root) -> info << "\n"; if (c == 'P') print(root); } return 0;
15
EXERCIȚIU Se citește un cuvânt de la tastatură. Să se genereze un arbore de căutare cu literele cuvântului și să se răspundă la următoarele cerințe: a) să se parcurgă svd, vsd, sdv arborele b) să se afișeze care vocale se găsesc și care nu se găsesc în arbore c) să se determine suma codurilor ascii a caracterelor din arbore d) să se afișeze frunzele arborelui e) să se determine suma codurilor ascii a caracterelor de pe nivelul x și nivelul cu cea mai mare sumă f) să se determine dacă două caractere sunt „frați”
16
Vă mulțumesc pentru atenție!
Proiect realizat de Micu Ana Clasa a XI-a C Colegiul Național de Informatică “Tudor Vianu”
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.