Você está na página 1de 16

RVORES AVL

Rosaura E. S. da Silva
Estrutura de Dados
rvores Balanceadas
Uma rvore dita balanceada quando as suas subrvores
esquerda e direita possuem a mesma altura.
Todos os links vazios esto no mesmo nvel, ou seja, que a rvore
est completa.
A rvore que no est balanceada, define-se como degenerada
rvores Balanceadas
Balanceamento Esttico
- O balanceamento esttico de uma rvore binria consiste
em construir uma nova verso, reorganizando-a.
Balanceamento Dinmico: AVL
rvore AVL em homenagem aos matemticos russos
(Adelson-Velskii e Landism-1962)
Uma rvore AVL uma rvore binria de pesquisa onde
a diferena em altura entre as subrvores esquerda e
direita no mximo 1 (positivo ou negativo).
A essa diferena chamamos de fator de
balanceamentode n (FatBal (n)).
Essa informao dever constar em cada n de uma
rvore balanceada
rvores AVL
Assim, para cada nodo podemos definir um fator de balanceamento
(FB), que vem a ser um nmero inteiro igual a
FB(nodo p) = altura(subrvore direita p) -
altura(subrvore esquerda p)
O Fator de uma folha sempre Zero (0)
rvores Balanceadas
Exemplos de rvores AVL e rvores no-AVL.
Os nmeros nos nodos representam o FB para cada nodo.
Para uma rvore ser AVL os fatores de balano devem ser
necessariamente -1, 0, ou 1.
rvores AVL
rvores No AVL
Balanceamento de AVL
Inicialmente inserimos um novo nodo na rvore.
A insero deste novo nodo pode ou no violar a propriedade de
balanceamento.
Caso a insero do novo nodo no viole a propriedade de
balanceamento podemos ento continuar inserindo novos nodos.
Caso contrrio precisamos nos preocupar em restaurar o balano da
rvore. A restaurao deste balano efetuada atravs do que
denominamos ROTAES na rvore.
rvores AVL
Se quisermos manter a rvore balanceada a cada
insero, devemos ter um algoritmo que ajuste os fatores
de balanceamento
O algoritmo corrige a estrutura travs de movimentao
dos ns, ao que chamamos de rotao.
rvores Balanceadas
Exemplos
Vamos considerar a seguinte rvore (os nmeros ao lado dos nodos
so o FB de cada nodo):
A rvore acima est balanceada, como podemos observar
pelos FB de cada nodo.
Os casos possveis de desbalanceamento so 2. Veremos
cada um deles.
Tipo 1 Rotao Dupla
Ao inserir o nmero 5 na rvore. Esta insero
produziria a seguinte rvore:
O nodo 8 fica com o FB -2 e tem um filho com FB +1. Neste caso o
balanceamento atingido com duas rotaes, tambm denominada
ROTAO DUPLA.
Primeiro rotaciona-se o nodo com FB 1 para a esquerda.
Tipo 1 Rotao Dupla
A seguir rotaciona-se o nodo que tinha FB -2 na direo oposta
(direita neste caso).
Tipo 1 Rotao Dupla
Os FB nos nodos voltaram a ficar dentro do esperado das rvores AVL.
O caso simtrico ao explicado acima acontece com os sinais de FB
trocados, ou seja, um nodo com FB +2 com um filho com FB -1. Tambm
utilizariamos uma rotao dupla, mas nos sentidos contrrios, ou seja, o
nodo com FB -1 seria rotacionado para a direita e o nodo com FB +2 seria
rotacionado para a esquerda.
Tipo 2 Rotao Simples
Suponha que queremos inserir o nodo 3 na rvore inicial.
A insero produziria a seguinte rvore:
A insero do nodo 3 produziu um desbalano no nodo 8 verificado pelo
FB -2 neste nodo.
Neste caso, como os sinais dos FB so os mesmos (nodo 8 com FB -2 e
nodo 4 com FB -1) significa que precisamos fazer apenas uma ROTAO
SIMPLES direita no nodo com FB -2.
No caso simtrico (nodo com FB 2) faramos uma rotao simples
esquerda.
Tipo 2 Rotao Simples
Aps a rotao simples a rvore ficaria:
Observe que os FB esto dentro do esperado para mantermos a
propriedade de
balanceamento de rvores AVL.
A descrio do algoritmo em pseudo-cdigo para a construo
de uma rvore AVL:
1. Insira o novo nodo normalmente (ou seja, da mesma
maneira que
inserimos numa ABB);
2. Iniciando com o nodo pai do nodo recm-inserido, teste se
a
propriedade AVL violada neste nodo, ou seja, teste se o FB
deste
nodo maior do que abs(1). Temos aqui 2 possibilidades:
2.1 A condio AVL foi violada
2.1.1 Execute as operaes de rotao conforme for
o caso (Tipo 1 ou Tipo 2)
2.1.2 Volte ao passo 1
2.2 A condio AVL no foi violada.
Se o nodo recm-testado no tem pai, ou seja, o nodo raiz
da
rvore, volte para inserir novo nodo (Passo 1)
Dicas: rvores AVL
1. Para identificarmos quando uma rotao
simples ou dupla observamos os sinais de
FatBal:
se o sinal for igual, a rotao simples.
se o sinal for diferente a rotao dupla.
2. Se FB+ rotao para esquerda
3. Se FB- rotao para direita
Referncias:
Bibliografia:
Luzzardi, Paulo Roberto Gomes - Estrutura da Dados. UCPel
Sites:
www.fw.uri.br/~elisa/estrutura/arvores_avl_b_2.pdf
Simulao:
http://www.site.uottawa.ca/~stan/csi2514/applets/avl/BT.html

Você também pode gostar