Professional Documents
Culture Documents
6 ARBORI 2-3-4
- Un nod contine n valori si n+1 pointeri ctre noduri fii (subarbori); n este
cuprins ntre M/2 si M;numrul maxim de pointeri pe nod M+1 determina
ordinul arborelui B: arborii binari sunt arbori B de ordinul 2, arborii 2-3 sunt
arbori B de ordinul 3, arborii 2-3-4 sunt arbori B de ordinul 4.
- Fiecare valoare dintr-un nod este mai mare dect valorile din subarborele
stnga si mai mic dect valorile aflate n subarborele din dreapta sa.
- Prin adugarea unei noi valori la un nod plin, acesta este spart n alte dou
noduri cu cte M/2 valori, iar valoarea median este trimis pe nivelul superior;
- Arborele poate creste numai n sus, prin crearea unui nou nod rdcin.
- La eliminarea unei valori dintr-un nod se pot contopi doua noduri vecine, de
pe acelasi nivel, dac suma valorilor din cele dou noduri este mai mic ca M.
La adugarea unei noi valori ntr-un arbore B se caut mai nti nodul frunz
care ar trebui s contin noua valoare, dup care putem avea dou cazuri:
- dac este loc n nodul gsit, se adaug noua valoare ntr-o pozitie eliberat
prin deplasarea altor valori la dreapta n nod, pentru mentinerea conditiei ca
valorile dintr-un nod s fie ordonate cresctor.
- dac nodul gsit este plin atunci el este spart n dou: primele n/2 valori
rmn n nodul gsit, ultimele n/2 valori se mut ntr-un nod nou creat, iar
valoarea median se ridic n nodul printe. La adugarea n nodul printe pot
aprea iar cele dou situatii si poate fi necesar propagarea n sus a unor valori
pn la rdcin; chiar si nodul rdcin poate fi spart si atunci creste nltimea
arborelui.
Pentru exemplul anterior (cu valorile 3,5,7 in radacina) metoda de sus n jos
constat c nodul rdcin (de unde ncepe cutarea) este plin si atunci l
sparge n trei: un nou nod rdcin cu valoarea5, un nou nod cu valoarea 7 (la
dreapta ) si vechiul nod cu valoarea 3 (la stanga).Spargerea radacinii n acest
caz nu era necesar deoarece nici un nod frunz nu este plin si ea nu sar fi
produs dac se revenea de jos n sus numai la gsirea unui nod frunz plin.
} bnod;
if (r==0) return;
infix (r leg[r n]); // scrie valori mai mari ca ultima din nodul r
}
Spargerea unui nod p este mai simpl dac se face top-down pentru c nu
trebuie s tin seama si de valoarea care urmeaz a fi adugat:
Dac nodul frunz gsit p nu este plin atunci insertia unei noi valori x necesit
gsirea pozitiei
void ins (int x, bnod* legx, bnod * p) { // legx= adresa subarbore cu valori mai
mari ca x
int i,j;
i=0;
p->leg[j+1] = p->leg[j];
}
p->val[i] = x; // pune x in pozitia i
rnou->leg[0]=r; rnou->leg[1]=nou;
i++;