Você está na página 1de 4

rvores AVL

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.

Estrutura do N para a rvore AVL


A estrutura do n agora necessita de mais alguns atributos de controle, necessrios para o controle de balanceamento da rvore AVL. Esq FatBal Pai

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; };

Insero em uma rvore AVL


O que pode acontecer quando um novo n inserido numa rvore balanceada ? Dada uma raiz r com subrvores L (left) e R (right), e supondo que a insero deve ser feita na sub-rvore da esquerda. Podemos distriguir 3 casos: 1. Se hL = hR, ento L e R ficam com alturas diferentes mas continuam balanceadas. 2. Se hL < hR, ento L e R ficam com alturas iguais e balanceamento foi melhorado. 3. Se hL > hR, ento L fica ainda maior e balanceamento foi violado. Na rvore abaixo:

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; }

Algoritmo para rotao esquerda sobre o n p

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.

Você também pode gostar