Adriana Libório Fernandes LinsArthur Cavalcanti AlemÁtila Valgueiro Malta MoreiraFlavio Juvenal da Silva JúniorGustavo Cauê Silva BotelhoMatheus Bispo Arrais de Souza
Murilo Raphael de Souza LiraRafael Alberto Gomes Pereira LimaRafael Brandão LoboRafael Loureiro de CarvalhoTiago Carneiro Pessoa CantoVinicius Miranda Cesar
Árvore AVLEm 1962, os matemáticos Russos G.M. Adelson-
Velskki e E. M. Landis descreveram procedimentos para inserção e eliminação de nós em árvores: os algoritmos de balanceamento são chamados algoritmos AVL e as árvores são chamadas árvores AVL.
Uma árvore AVL é uma árvore binária de busca (ABB), auto-balenceada, construída de tal modo que a altura de sua subárvore direita difere da altura da subárvore esquerda de no máximo 1.
balance(nó) = | altura(dir) - altura(esq) | ≤ 1
Representação do nó
BalanceamentoUma árvore AVL é dita balanceada quando, para
cada nó da árvore, a diferença entre as alturas das suas sub-árvores (direita e esquerda) não é maior do que um. Caso a árvore não esteja balanceada é necessário seu rebalanceamento através de rotação simples ou rotação dupla.
O rebalanceamento pode ser requerido para as operações de inserção e remoção de elementos.
InserçãoEm Árvores AVL uma inserção sempre cria
uma nova folha, tal fato pode alterar a altura da árvore e por conseqüência desbalancear a mesma, exigindo um rebalanceamento para restauração da propriedade AVL.
Qualquer que seja a inserção em uma Árvore AVL, será necessário no máximo uma rotação para restauração do equilíbrio.
RotaçõesHá diversos casos de inserção que não
requerem rotação. Caso seja necessário fazer alguma rotação, há quatro situações diferentes a considerar. Supondo que A é o nó crítico, B é o seu filho à esquerda e C seu filho à direita, temos:
Balance de A
Lado da inserção
Sub-árvore do filho
Tipo de rotação
-1 esquerda
de A esquerda
de BSIMPLES
+1 direita de
A direita de C SIMPLES
-1 esquerda
de A direita de B DUPLA
+1 direita de
A esquerda
de CDUPLA
A
CB
Rotação simples para direitaInserção dos elementos 50, 30 e 20:
50
30
20
30
20
0
0
-1
0
-1
-20
0 0
Rotação simples para esquerdaInserção dos elementos 50, 60 e 70:
50
70
60
70
60
0
0
1
0
1
2
0
0
0
Rotação dupla para direita(Rotação simples para esquerda + Rotação simples para direita)
Inserção dos elementos 40, 20 e 30:
30
2030
20
40
0-1
0
0
1
-2
-1
0
0
00
Rotação dupla para esquerda(Rotação simples para direita + Rotação simples para esquerda)
Inserção dos elementos 50, 70 e 60:
50
70
60
70
60
0
0
1
0
-1
2
0
10
0
0
Rotação simples – de novo
X
Y
a b
c
-2
-1
h+1 h
h+2 h
a
Rotação simples – de novo
b
h
X
c
h
Y
h+1
a
0
0
h+1
Rotação dupla – de novoX
Y
b
d
-2
1
h
h
aZ
c
h+1
-1/0/1
h(b)
h(c)
Bal(z) = -1 h h-1
Bal(z) = 0 h h
Bal(z) = 1 h-1 h
Max( h(b) , h(c) ) = h
h+2
Rotação dupla – de novoX
Y
b
d
-2
1
h
h
aZ
c
h+1
-1
h(b)
h(c)
Bal(z) = -Bal(z) = -11
hh h-1h-1
Bal(z) = 0 h h
Bal(z) = 1 h-1 h
Max( h(b) , h(c) ) = h
h+2
h h-1
Rotação dupla – de novoX
Y
b
d
-2
1
h
h
aZ
c
h+1
1
h(b)
h(c)
Bal(z) = -1 h h-1
Bal(z) = 0 h h
Bal(z) = Bal(z) = 11
h-1h-1 hh
Max( h(b) , h(c) ) = h
h+2
h-1 h
Rotação dupla – de novoX
Y
b
d
-2
1
h
h
aZ
c
h+1
0
h(b)
h(c)
Bal(z) = -1 h h-1
Bal(z) = Bal(z) = 00
hh hh
Bal(z) = 1 h-1 h
Max( h(b) , h(c) ) = h
h+2
h h
Rotação dupla – de novoX
Y
b
d
-2
1
h
h
aZ
c
h+1
-1/0/1
h(b)
h(c)
Bal(z) = -1 h h-1
Bal(z) = 0 h h
Bal(z) = 1 h-1 h
Max( h(b) , h(c) ) = h
h+2
Rotação dupla – de novoX
d
h
Y
h
aZ
b c
h(b)
h(c)
Bal(z) = -1 h h-1
Bal(z) = 0 h h
Bal(z) = 1 h-1 h
Max( h(b) , h(c) ) = h
h / h-1 h / h-1
0/-1 0/1
h+1 h+1
0
RemoçãoEm Árvores AVL a retirada de um nó é uma
operação mais complexa que a inserção e pode resultar no desbalanceamento da árvore.
Em situações específicas durante uma remoção podem ser necessárias log(n) rotações para restauração da propriedade AVL(uma para cada nível da árvore).
40
45
Considere a Árvore AVL acima.
Ela está balanceada???
50 7
038
30
39
45
35
20
15
25
42
17
32
60
75
65
55
80
90
99
88
77
74
+1+1
+1+1
-1-1
00
+1+1
-1-1+1+1
-1-1
+1+1 00
+1+1 -1-1
00
00
00
0000
+1+1
-1-1
-1-1
-1-1
-1-1
-1-1
O que acontece se removermos o nó 39 ???
42
00
-2-2
Nó 40 fica desbalanceado (rde)Nó 38 fica desbalanceado (rse)
56
76
78
79
89
54
57
64
00 00
00
00 +1+1
+1+1 0000
73
40
-1-1
+1+1+200
Outras rotações são necessárias até a árvore recuperar a propriedade AVL
Top Related