Professional Documents
Culture Documents
1. Coninutul lucrrii
n lucrare sunt prezentate principalele operaii asupra arborilor AVL.
2. Consideraii teoretice
Arborii AVL sunt arbori binari ordonai, care au n plus o proprietate de echilibru stabilit de Adelson,
Velski i Landis, de unde i denumirea de arbori AVL.
Proprietatea de echilibru e valabil pentru orice nod al arborelui i spune c: nalimea subarborelui
stng al nodului difer de nalimea subarborelui drept al nodului prin cel mult o unitate.
Cu alte cuvinte, pentru orice nod, cei doi subarbori au nalimile egale, sau, dac nu, ele difer prin
maxim o unitate n favoarea unuia sau altuia dintre subarbori.
Formal, acest lucru se traduce n felul urmtor:
X
hs
hd
adic primul nod ai crui subarbori difer ca nalime prin 2 uniti. Acest nod trebuie echilibrat i el se va afla
ntotdeauna ntr-unul din cele 4 cazuri prezentate n continuare.
2.1 Cazuri de echilibrare
2.1.1
2.1.3
2.1.4
2.2 Inserarea
n interiorul funciei de inserare se apeleaz o funcie de echilibrare care, n cazul n care intervin
cazuri de dezechilibrare, va echilibra subarborele sau chiar arborele.
Functia este urmaroarea:
r->right=w->left;
r=p->left;
w=w->left;
if (r!=NULL)
while ((r!=w)&&(r!=NULL)){
r = echilibrare(r);
r=r->right;
}
}
else{
p->key=w->key;
p->left=w->left;
q=w;
}
}
delete(q);// se sterge q
}
if (p!=NULL)
p = echilibrare(p);// se echilibreaza p daca nu este NULL
return p;
}
3. Mersul lucrrii
3.1 Arborele genealogic al unei persoane se reprezint astfel: numele persoanei este cheia nodului
rdcin i pentru fiecare nod cheia descendentului stng este numele tatlui, iar a descendentului drept este
numele mamei. Se citesc dou nume de la tastatur. Ce relaie de rudenie exist ntre cele dou persoane? Se
presupune c o familie are doar un singur fiu.
3.2 S se scrie funcii de pretty-print (tiprire frumoas) a arborilor.
3.3 S se implementeze un arbore binar de cutare care se auto-organizeaz pentru stocarea i cutarea
elementelor din text, folosind urmtoarea euristic:
De fiecare dat cnd se caut un cuvnt, acesta este mutat ca i rdcin n arbore.
De fiecare dat cnd se caut un cuvnt, acesta este interschimbat cu cuvntul care i este printe.
node* single_rotate_with_left( node* k2 )
{
node* k1 = NULL;
k1 = k2->left;
k2->left = k1->right;
k1->right = k2;
return k1; /* new root */
}
node* single_rotate_with_right( node* k1 )
{
node* k2;
k2 = k1->right;
k1->right = k2->left;
k2->left = k1;
return k2; /* New root */
}
node* double_rotate_with_left( node* k3 )
{
/* Rotate between k1 and k2 */
k3->left = single_rotate_with_right( k3->left );