Buscar

Estruturas de Dados - Árvores AVL

Prévia do material em texto

ÁRVORES AVL
Rosaura E. S. da Silva
Estrutura de Dados
Árvores Balanceadas
z Uma árvore é dita balanceada quando as suas subárvores à
esquerda e à direita possuem a mesma altura.
z Todos os links vazios estão no mesmo nível, ou seja, que a árvore 
está completa.
z A árvore que não está balanceada, define-se como degenerada
Árvores Balanceadas
Balanceamento Estático
- O balanceamento estático de uma árvore binária consiste
em construir uma nova versão, reorganizando-a.
Balanceamento Dinâmico: AVL
{ Árvore AVL em homenagem aos matemáticos russos 
(Adelson-Velskii e Landism -1962)
{ Uma árvore AVL é uma árvore binária de pesquisa onde 
a diferença em altura entre as subárvores esquerda e 
direita é no máximo 1 (positivo ou negativo).
{ A essa diferença chamamos de “fator de 
balanceamento” de n (FatBal (n)).
{ Essa informação 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 número inteiro igual a
FB(nodo p) = altura(subárvore direita p) -
altura(subárvore esquerda p)
O Fator de uma folha é sempre Zero (0)
Árvores Balanceadas
z Exemplos de árvores AVL e árvores não-AVL.
z Os números nos nodos representam o FB para cada nodo.
z Para uma árvore ser AVL os fatores de balanço devem ser 
necessariamente -1, 0, ou 1.
Árvores AVL
Árvores Não AVL
Balanceamento de AVL
z Inicialmente inserimos um novo nodo na árvore.
z A inserção deste novo nodo pode ou não violar a propriedade de 
balanceamento.
z Caso a inserção do novo nodo não viole a propriedade de 
balanceamento podemos então continuar inserindo novos nodos.
z Caso contrário precisamos nos preocupar em restaurar o balanço da 
árvore. A restauração deste balanço é efetuada através do que 
denominamos ROTAÇÕES na árvore.
Árvores AVL
z Se quisermos manter a árvore balanceada a cada 
inserção, devemos ter um algoritmo que ajuste os fatores 
de balanceamento
z O algoritmo corrige a estrutura través de movimentação 
dos nós, ao que chamamos de “rotação”.
Árvores Balanceadas
z Exemplos
z Vamos considerar a seguinte árvore (os números ao lado dos nodos 
são o FB de cada nodo):
•A árvore acima está balanceada, como podemos observar
pelos FB de cada nodo.
•Os casos possíveis de desbalanceamento são 2. Veremos
cada um deles.
Tipo 1 – Rotação Dupla
z Ao inserir o número 5 na árvore. Esta inserção 
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 rotações, também denominada 
ROTAÇÃO DUPLA.
•Primeiro rotaciona-se o nodo com FB 1 para a esquerda.
Tipo 1 – Rotação Dupla
A seguir rotaciona-se o nodo que tinha FB -2 na direção oposta
(direita neste caso).
Tipo 1 – Rotação Dupla
•Os FB nos nodos voltaram a ficar dentro do esperado das árvores AVL.
•O caso simétrico ao explicado acima acontece com os sinais de FB
trocados, ou seja, um nodo com FB +2 com um filho com FB -1. Também
utilizariamos uma rotação dupla, mas nos sentidos contrários, 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 – Rotação Simples
Suponha que queremos inserir o nodo 3 na árvore inicial.
A inserção produziria a seguinte árvore:
• A inserção do nodo 3 produziu um desbalanço no nodo 8 verificado pelo 
FB -2 neste nodo.
•Neste caso, como os sinais dos FB são os mesmos (nodo 8 com FB -2 e 
nodo 4 com FB -1) significa que precisamos fazer apenas uma ROTAÇÃO 
SIMPLES à direita no nodo com FB -2.
• No caso simétrico (nodo com FB 2) faríamos uma rotação simples à
esquerda.
Tipo 2 – Rotação Simples
Após a rotação simples a árvore ficaria:
Observe que os FB estão dentro do esperado para mantermos a 
propriedade de
balanceamento de árvores AVL.
A descrição do algoritmo em pseudo-código para a construção
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 recém-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 condição AVL foi violada
2.1.1 Execute as operações de rotação conforme for 
o caso (Tipo 1 ou Tipo 2)
2.1.2 Volte ao passo 1
2.2 A condição AVL não foi violada.
Se o nodo recém-testado não tem pai, ou seja, é o nodo raiz 
da
árvore, volte para inserir novo nodo (Passo 1)
Dicas: Árvores AVL
1. Para identificarmos quando uma rotação é
simples ou dupla observamos os sinais de 
FatBal:
• se o sinal for igual, a rotação é simples.
• se o sinal for diferente a rotação é dupla.
2. Se FB+ rotação para esquerda
3. Se FB- rotação para direita
Referências:
Bibliografia:
Luzzardi, Paulo Roberto Gomes - Estrutura da Dados. UCPel
Sites:
www.fw.uri.br/~elisa/estrutura/arvores_avl_b_2.pdf
Simulação:
http://www.site.uottawa.ca/~stan/csi2514/applets/avl/BT.html
	ÁRVORES AVL
	Árvores Balanceadas
	Árvores Balanceadas
	Árvores AVL
	Árvores Balanceadas
	Balanceamento de AVL
	Árvores AVL
	Árvores Balanceadas
	Tipo 1 – Rotação Dupla
	Tipo 1 – Rotação Dupla
	Tipo 1 – Rotação Dupla
	Tipo 2 – Rotação Simples
	Tipo 2 – Rotação Simples
	A descrição do algoritmo em pseudo-código para a construçãode uma árvore AVL:
	Dicas: Árvores AVL
	Referências:

Continue navegando