Documente Academic
Documente Profesional
Documente Cultură
Toate nodurile din subarborele stâng al unui nod x au cheile mai mici decât cheia lui x.
Toate nodurile din subarborele drept al unui nod x au cheile mai mari decât cheia lui x.
Rotaţia este o operaţie locală care schimbă ierarhia părinte-fiu a nodurilor dintr-un arbore
binar de căutare dar păstrează proprietăţile acestuia. Rotația este utilizată de exemplu pentru
echilibrarea arborilor roșu-negru.
Există rotație la dreapta în jurul unui nod și rotație la stânga în jurul unui nod. Aceste două
rotatii sunt ilustrate în figura de mai jos.
Observaţii:
pentru a putea efectua o rotaţie spre dreapta în jurul nodului x, este necesar ca
subarborele stâng al lui x să fie nenul
pentru a putea efectua o rotaţie spre stânga în jurul nodului y, este necesar ca
subarborele drept al lui x să fie nenul
1
Exemplu: În figura de mai jos este prezentat un exemplu de rotație la dreapta în jurul nodului
cu cheia 28 într-un arbore binar de căutare.
Soluţie: la fiecare moment dat compar cheia nodului curent x, x.info, cu k. Dacă x.info = k
atunci se returnează nodul x. Dacă x.info<k atunci se continuă căutarea în subarborele drept,
altfel se continuă căutarea în subarborele stâng al lui x.
Algoritm:
CAUT_BIN(T,k)
x=T.rad
cât timp xNULL şi x.infok
dacă k<x.info atunci
x=x.st
altfel x=x.dr
sfârşit dacă
sfârşit cât timp
RETURN x
AB_INSERT(T,z)
y=NULL //va memora părintele nodului curent x
x=T.rad
cat timp xNULL
y=x
2
daca z.info < x.info atunci
x=x.st
altfel x=x.dr
sfarsit dacă
sfarsit cat timp
z.p=y
daca y=NULL atunci T.rad=z //inserarea radacinii
alfel //verific pe care parte se face inserţia
daca z.info < y.info atunci
y.st = z
altfel y.dr = z
sfarsit daca
sfarsit daca
RETURN
Exemplu: inserția succesivă a cheilor 7, 20, 1, 4, 9, 31, 14, 5 într-un arbore binar de căutare
inițial vid produce rezultatul prezentat în figura de mai jos.
Observaţii:
3
1.4. Parcurgerea unui arbore binar (de căutare).
în adâncime: preordine (RSD), inordine (SRD) și postordine (SDR)
în lățime (pe nivele)
Parcurgerile în adâncime diferă prin ordinea în care se parcurge un nod x față de cei doi
subarbori ai săi.
RSD - întâi se parcurge nodul curent, apoi considerând aceeași ordine se parcurge
subarborele stâng al lui x și apoi subarborele drept al lui x.
SRD - întâi se parcurge subarborele stâng al nodului curent x, apoi nodul x și în final
subarborele drept al lui x.
SDR: - întâi se parcurge subarborele stâng al nodului curent x, apoi subarborele drept
al nodului x și la final se parcurge nodul x
Parcurgerea unui arbore binar de căutare în inordine (SRD) are ca rezultat șirul sortat al
cheilor existente în arbore. Pentru primul exemplu de arbore binar de căutare din acest capitol
parcuregerile sunt:
RSD: 38, 25, 10, 18, 11, 23, 53, 40, 39, 60, 55
SRD: 10, 11, 18, 23, 25, 38, 39, 40, 53, 55, 60
SDR: 11, 23, 18, 10, 25, 39, 40, 55, 60, 53, 38
2.1. Definiţie: Un arbore roşu-negru este un arbore binar de căutare în care fiecărui nod i se
asociază o culoare – roşu sau negru – şi care are următoarele proprietăţi:
1. Fiecare nod este roşu sau negru – are deci un câmp suplimentar culoare
4. Dacă un nod este roşu, ambii descendenţi sunt negri părintele unui nod roşu este
negru.
5. Pentru fiecare nod într-un arbore T oricare drum de la nod la o frunză (NULL) are
acelaşi număr de noduri negre (incluzând frunza NULL și excluzând nodul de la care
se pornește) pe fiecare drum de la rădăcina T.rad la o frunză se găsește acelaşi
număr de noduri negre. Acest număr reprezintă înalţimea neagră a arborelui notată în
continuare cu bh(r) (black height).
4
Exemplu de arbore roșu-negru:
Observaţii:
Într-un arbore roşu-negru nici un drum de la rădăcină la o frunză nu poate fi mai lung
decât dublul unui alt drum la altă rădăcină. Acest lucru asigură o oarecare balansare a
arborelui .
Definirea unui nod NULL pentru fiecare frunză presupune un consum inutil de
memorie. Din acest motiv se poate considera în locul acestor frunze un singur nod
santinelă T.nil de care se leagă acele noduri interne care au ca descendenţi frunze
NULL.
5
Operaţiile de căutare, maxim, minim, succesor, predecesor depind de înălţimea h a
arobrelui și se demonstrează că aceste operaţii au complexitatea (log2n).
Operaţiile de inserţie şi ştergere sunt ceva mai complicate decât în cazul arborilor
binari de căutare simpli, deoarece după inserţie/ştergere trebuie eventual refăcută
structura de arbore roşu-negru.
Observaţii:
Proprietatea 2 poate fi contrazisă dacă nodul inserat este chiar rădăcina. În acest caz
este suficientă recolorarea nodului negru.
Proprietatea 4 poate fi contrazisă, dacă părintele de care s-a legat noul nod are culoarea
roşie. În acest caz trebuie refăcută proprietatea. Există în această situaţie 3 cazuri care
vor fi discutate în continuare.
Refacerea a proprietăţilor RN este necesară doar dacă părintele nodului inserat este roşu.
Observaţii:
Dacă notăm cu z nodul inserat (nodul curent), cu P părintele său, cu U unchiu (fratele
părintelui) iar cu B bunicul (părintele părintelui), atunci z se poate afla la stânga sau la
dreapta lui P. Cele două cazuri se tratează în mod similar, prin simetrie. Vom
considera în continuare inserţia pe stânga bunicului B.
Datorită faptului că P este roșu înainte de inserţie, iar inserţia s-a produs într-un arbore
roşu-negru valid, înseamnă că P nu este rădăcină si deci există nodul B T.nil
6
Cazurile de refacere a proprietăţii 4 în urma inserţiei
Deoarece U, P sunt roşii rezultă că B are culoarea neagră (altfel s-ar contrazice proproietatea
4) este suficientă recolorarea P, U, B, adică P şi U devin negri iar B roşu.
În urma acestei modificări poate avea loc o contrazicere a proprietăţii 4 pentru B şi părintele
său, deci se reia procedura de refacere a proprietăţilor roşu-negru pornind de la z = B.
Acelaşi procedeu se aplică şi în cazul în care z se află pe dreapta lui P sau dacă P și z se află la
dreapta lui B și U la stânga.
Cazul 2:
SAU
Cazul 3:
SAU
7
b) P se află pe dreapta lui B, unchiul este negru și z se află la dreapta lui P
Observaţie: printr-o rotaţie la stânga în jurul lui P, cazu 2 a) se reduce la cazul 3 a).
(1) Recolorare B, P.
Se observă faptul că înălţimea neagră nu se modifică pe nici una dintre cele două ramuri
Exemplu: construcţia unui ARN prin inserţii succesive ale cheilor 20, 40, 45, 36, 13, 19, 14, 2,
10
8
Algoritmii în pseudo-cod pot fi găsiți în bibliografia recomnadată.
9
Probleme rezolvate tip examene de licență
Răspuns corect: d.
Explicație: în definiția unui arbore roșu-negru se specifică faptul ca descendenții unui nod
roșu sunt întotdeauna negri. Despre descendenții nodurilor negre nu se fac afirmații. Rezultă
că un nod negru poate avea atât descendenți roșii cât și negri. De asemenea un nod negru
poate avea și numai descendenți negri. Rezultă și că părintele unui nod negru poate fi negru.
Astfel nici una dintre afirmațiile a, b sau c nu este adevărată.
Problema 2. Într-un arbore roșu negru valoarea maximă a raportului dintre numărul de noduri
roșii și numărul total de noduri interne (adică fără frunzele nil) este:
a. 1/2
b. 2/3
c. 2
d. 1
Răspuns corect: b
Explicație: Valoarea maximă a raportului dintre numărul de noduri roșii și numărul de noduri
interne se obține atunci când fiecare nod intern negru are doi descendenți roșii. În acest caz
numărul de noduri roșii este de două ori mai mare decât numărul de noduri negre interne.
Cum suma numărului de noduri roșii și a numărului de noduri negre interne este chiar
numărul de noduri interne, rezultă faptul că numărul de noduri roșii este 2/3 din numărul total
de noduri interne, deci valoarea raportului este cea dată la punctul d.
Bibliografie recomandată:
10