Escolar Documentos
Profissional Documentos
Cultura Documentos
G.M. Adelson-Velskii e E.M. Landis (1962) apresentaram uma rvore de busca binria que balanceada com respeito a altura das sub-rvores. Uma rvore AVL uma rvore balanceada cuja diferena em altura entre a sub-rvore esquerda e a sub-rvore direita (em qualquer n) deve ser, no mximo, de um nvel. Numa rvore AVL, cada chave nica e as operaes de insero/ remoo tentam manter o equilbro da rvore. Definio: Uma rvore binria vazia sempre balanceada por altura. Se T no vazia e Tesq e Tdir so sub-rvores da esquerda e direita, ento T balanceada por altura se: 1. Tesq e Tdir so balanceadas por altura; 2. hD-hE = 1, sendo hD e hE a altura de Tesq e Tdir, respectivamente. Habitualmente, em cada n, existe um campo adicional que indica a situao de equilbrio desse n, chamado de fator de balanceamento: 0 : equilibrada; 1 : sub-rvore esquerda tem mais um nvel que a da direita; 1 : sub-rvore direita tem mais um nvel que a da esquerda.
rvore AVL
0 N desbalanceado
rvore No - AVL
0
8
-1 0 +1 +2
8
+1
4
0 0
11
0
3
0 0
11
0
2
0 0
9
0
16
0 0
5
0
9
0
16
0
12
18
12
18
Definio: O fator de balanceamento de um determinado n em uma rvore binria definido como sendo hD-hE, sendo hD e hE a altura da sub-rvore da direita e esquerda respectivamente.
Elem
Dir
Novos atributos: FatBal: armazena o fator de balanceamento daquele n dentro da rvore AVL. Pai: guarda a referncia para o n pai. No caso da raiz da rvore, o pai igual a null.
typedef struct no_AVL AVL; struct no_AVL { int info; int fb; // fator de balanceamento AVL *pai; AVL *esq; AVL *dir; };
Ns 9 ou 11 podem ser inseridos sem balanaceamento . Subrvore com raiz 10 passa a ter uma subrvore e subrvore com raiz 8 vai ficar melhor balanceada ! Insero dos ns 3, 5 ou 7 requerem que a rvore seja rebalanceada!
Fator de Balanceamento (FB) de um n a altura da subrvore direita do n menos a altura da subrvore esquerda do n int altura(Arvore t) { int altE, altD: AVL *q, *temp; if (t == NULL) return -1; else { altE = altura(t->esq); altD = altura(t->dir); if (altE < altD) return altD + 1; else return altE + 1; } }
Rebalanceamento: Os problemas podem ser mapeados para dois casos: Tipo 1: o n raiz de uma subrvore tem FB 2 (ou -2) e tem um filho com FB 1 (-1) o qual tem o mesmo sinal que o FB do n pai. Exemplos:
soluo: rotao simples sobre o n de FB=2 (-2). Rotaes so feitas esquerda quando FB positivo e direita quando FB negativo.
Algoritmo para rotao direita sobre o n p void rotacao_direita(AVL *p) { AVL *q, *temp; q = p->esq; temp = q->dir; q->dir = p; p->esq = temp; }
void rotacao_esquerda(AVL *p) { AVL *q, *temp; q = p->dir; temp = q->esq; q->esq = p; p->dir = temp; }
Tipo 2: o n raiz de uma subrvore tem FB=2 (ou -2) e tem uma um filho com FB=-1 (1) o qual tem o sinal oposto ao FB do n pai. Exemplo: Caso (-2) (1) FB do n que contm 8: -2 FB do n que contm 4: 1
soluo: duas rotaes 1. primeiro roda-se o n com FB=1 (-1) na direo apropriada 2. depois roda-se o n que tinha FB=-2 (2) na direo oposta
Rotao de 4 esquerda
Rotao de 8 direita
Exerccios ____________________________________________________________
1. Implemente as rotaes em uma rvore AVL. 2. Implemente a operao de insero em uma rvore AVL. 3. Faa o teste usando a rvore AVL acima identificando as rotaes aplicadas a cada nvel. 4. Faa a simulao da rvore AVL inserindo a seqncia de nmeros a seguir: 10, 15, 2, 20, 12, 14, 3, 6, 1, 23 5. Utilizando a rvore gerada no exerccio anterior, realize a remoo dos seguintes ns: 2, 20, 14, 15.