Árvores AVL

Propaganda
Árvores AVL
Definição: Uma árvore binária vazia é sempre balanceada por altura. Se T não é
vazia e TL e TR são suas sub-árvores da esquerda e direita, então T é balanceada por
altura se:
1. TL e TR são balanceadas por altura;
2. |hl - hr|<=1, onde hl e hr são as alturas de TL e TR respectivamente.
Adelson-Velskii e Landis em 1962 apresentaram uma árvore de busca binária
que é balanceada com respeito a altura das sub-árvores. Uma característica
importante deste tipo de árvore é que uma busca é realizada em O(lg(n)) se a árvore
possui n nós.
INSERSÃO
A inserção em árvores AVL e basicamente a mesma das árvores binárias
com algumas considerações para manter o balanceamento da árvore.
Uma breve explicação sobre o Algoritmo de Inserção
Todo novo nodo inserido tem fator de balanceamento igual a zero.
O algoritmo é recursivo (não necessariamente) isso, cria um caminho
entre o nodo inserido e a raiz.
O algoritmo sendo recursivo faz a verificação de balanceamento no
desempilhar das suas chamadas.
Se for inserido um nodo à esquerda o fator de balanceamento do nodo pai
tornar-se-a -1.
Se for inserido um nodo à direita o fator de balanceamento do nodo pai
tornar-se-a 1.
Se um nodo for inserido à esquerda e o fator de balanceamento de
seu avô for = -1 e seu pai também tiver fatbal = -1 é feita uma rotação
simples à direita. Ver
Se um nodo for inserido à direita e o fator de balanceamento de seu avô
for = 1 e seu pai também tiver fatbal = 1 é feita uma rotação simples à
esquerda. Ver
Se um nodo for inserido à esquerda e o fator de balanceamento de seu avô
for = -1 e seu pai tiver fatbal =1 à e feita uma rotação dupla para direita. Ver
Se um nodo for inserido à direita e o fator de balanceamento de seu avô
for = 1 e seu pai tiver fatbal = -1 é feita um rotação dupla a esquerda. Ver
É necessário ressaltar que o balanceamento de uma sub-árvore TL
pertencente a árvore T não implica que T também esteja balanceada pois, a
ação de ajuste da sub-árvore TL pode ter desequilibrado a árvore T, então o
algoritmo deve tratar esta situação, mas sendo o algoritmo recursivo este caso
será verificado a cada desempilhar da chamada anterior e assim será garantido
que a árvore T esteja balanceada.
Rotação Simples à Direita
Nodo avô desequilibrado fatbal = -1 e fatbal do pai = -1
Avô =>
p
Fatbal =
0-1
u
Pai =>
u
Fatbal =
0-1
q
q
Fatbal =
Fatbal = 0
0
Fatbal = 0
Ok árvore balanceada
Volta
p
Fatbal = 0
Rotação Simples à Esquerda
Nodo avô desequilibrado fatbal=1 e pai fatbal=1.
Avô =>
u
p
Pai =>
p
Fatbal =
01
u
Fatbal =
10
q
Fatbal = 0
q
OK árvore balanceada
Volta
Rotação Dupla à Direita
Avô desequilibrado fatbal= -1 e pai = 1
q
p
Fatbal =0
Rotação simples à direita entre
p e q.
u
Fatbal =0
Pai =>
q
p
Avô =>
u
p
Fatbal =
Fatbal =
10
Rotação simples para esquerda entre
u e q.
Fatbal =0
u
q
OK árvore balanceada
Volta
Fatbal = 0
0-1
Rotação Dupla à Esquerda
Avô desequilibrado fatbal =1 e pai = -1
Avô
p
Fatbal = 10
p
q
Fatbal = 0
Uma rotação simples para
esquerda entre p e q
Pai =>
u
Fatbal = -1
0
q
p
Uma rotação simples para
direita entre u e q
q
Fatbal = 0
u
Fatbal = 0
OK árvore balanceada
Volta
u
Fatbal = 0
Download