introdução a árvores avl · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0...
TRANSCRIPT
![Page 1: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/1.jpg)
IntroduIntrodução a árvores AVLção a árvores AVL
Prof. Ernesto Lindstaedt
![Page 2: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/2.jpg)
Definição Definição
O nome AVL vem dos seus criadores Adelson O nome AVL vem dos seus criadores Adelson Velsky e Landis (1962); Velsky e Landis (1962);
Uma ABP Uma ABP TT é denominada é denominada AVLAVL se:se:•• Para todos nós de Para todos nós de TT, as alturas de suas duas , as alturas de suas duas
subsub--árvores diferem árvores diferem no máximo em uma no máximo em uma unidade;unidade;
Uma ABP é Uma ABP é completamente balanceadacompletamente balanceadaquando a distância média dos nós até a raiz for quando a distância média dos nós até a raiz for mínima.mínima.
![Page 3: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/3.jpg)
Definição Definição Balanceamento EstáticoBalanceamento EstáticoEste balanceamento consiste em, depois de um Este balanceamento consiste em, depois de um certo tempo de uso da árvore, destruir sua certo tempo de uso da árvore, destruir sua estrutura, guardando suas informações em uma estrutura, guardando suas informações em uma lista ordenada e reconstruílista ordenada e reconstruí--la de forma la de forma balanceada. balanceada.
Balanceamento DinâmicoBalanceamento DinâmicoTem por objetivo reajustar os nós de uma árvore Tem por objetivo reajustar os nós de uma árvore sempre que uma inserção ou remoção provocar sempre que uma inserção ou remoção provocar desbalanceamento.desbalanceamento.
![Page 4: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/4.jpg)
Definição Definição Como saber se a árvore está Como saber se a árvore está desbalanceada desbalanceada ??•• Verificando se existe algum nó “desregulado”.Verificando se existe algum nó “desregulado”.
Como saber se um nodo está Como saber se um nodo está desregulado desregulado ? ? •• SubtraindoSubtraindo--se as alturas das suas subse as alturas das suas sub--árvores. árvores.
Por questões de Por questões de eficiênciaeficiência, estas diferenças são , estas diferenças são prépré--calculadas e armazenadas nos nós calculadas e armazenadas nos nós correspondentes, sendo atualizadas durante as correspondentes, sendo atualizadas durante as operações.operações.
![Page 5: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/5.jpg)
AVL AVL –– Fator de BalanceamentoFator de BalanceamentoPossíveis valores de diferença para cada nó em Possíveis valores de diferença para cada nó em uma árvore balanceada: uma árvore balanceada: --11, , 00, , 11..
Fator de Balanceamento (FB) de cada nó da Fator de Balanceamento (FB) de cada nó da árvoreárvore•• FB(p)FB(p) = h(sae(p)) = h(sae(p)) –– h(sad(p)) :h(sad(p)) :
h = alturah = alturap = nóp = nósae = subsae = sub--árvore à esquerdaárvore à esquerdasad = subsad = sub--árvore à direitaárvore à direita
Em uma árvore binária balanceada todos os FB Em uma árvore binária balanceada todos os FB de todos os nós estão no intervalo de todos os nós estão no intervalo --1 1 ≤≤ FB FB ≤≤ 1.1.
![Page 6: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/6.jpg)
AVLAVL
Exemplo de uma ABP não AVLExemplo de uma ABP não AVLInserção: 4, 1, 3, 6, 5, 2 e 7
4
1 6
3
2
75
1
-2
1
0
0
0 0
Fator de BalanceamentoEx.: Nó Raiz
FB(“4”) = 3 – 2 FB(“4”) = 1
![Page 7: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/7.jpg)
AVL AVL –– VantagemVantagemA vantagem de uma árvore balanceada com A vantagem de uma árvore balanceada com relação a uma degenerada está em sua relação a uma degenerada está em sua eficiência;eficiência;
Ex.: numa árvore binária degenerada de 10.000 Ex.: numa árvore binária degenerada de 10.000 nós são necessárias, em média, 5.000 nós são necessárias, em média, 5.000 comparações (semelhança com arrays ordenados comparações (semelhança com arrays ordenados e listas encadeadas);e listas encadeadas);
Numa árvore balanceada com o mesmo número Numa árvore balanceada com o mesmo número de nós essa média reduzde nós essa média reduz--se a 14 comparações.se a 14 comparações.
![Page 8: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/8.jpg)
AVL AVL –– OperaçõesOperaçõesA inserção ou remoção de um nó em uma árvore A inserção ou remoção de um nó em uma árvore AVL AVL podepode ou ou nãonão provocar seu provocar seu desbalanceamento;desbalanceamento;
Se a árvore AVL ficar desbalanceada, a Se a árvore AVL ficar desbalanceada, a restauração do seu balanceamento é realizado restauração do seu balanceamento é realizado através de através de ROTAÇÕESROTAÇÕES..
Rotação Dupla:Rotação à EsquerdaRotação à Direita
Rotação Simples:Rotação à EsquerdaRotação à Direita
![Page 9: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/9.jpg)
AVL AVL –– Classe Nodo Classe Nodo public class public class AvlNodeAvlNode {{
protected int height; protected int height; protected int key;protected int key;protected AvlNode left, right;protected AvlNode left, right;
public AvlNode ( int theElement ) {public AvlNode ( int theElement ) {this( theElement, null, null );this( theElement, null, null );
}}
public AvlNode ( int theElement, AvlNode lt, AvlNode rt public AvlNode ( int theElement, AvlNode lt, AvlNode rt ) ) {{
key = theElement;key = theElement;left = lt;left = lt;right = rt;right = rt;height = 0;height = 0;
}}}}
![Page 10: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/10.jpg)
AVL AVL –– Rotação Simples à DireitaRotação Simples à DireitaToda vez que uma subToda vez que uma sub--árvore fica com um árvore fica com um fator:fator:•• positivopositivo e sua sube sua sub--áárvore da esquerda tambrvore da esquerda tambéém m
tem um fator tem um fator positivopositivo
120
110 150
100
80
130 200
1
0
0
0
120
100 150
80 110 130 200
0
0
00
0
0 0
2
01
![Page 11: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/11.jpg)
AVL AVL –– Rotação Simples à DireitaRotação Simples à Direita
k2
k1
x y
z
Nó k2 é a raiz de transformação
X, Y e Z são subárvores (vazias ou não)
![Page 12: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/12.jpg)
AVL AVL –– Classe InicialClasse Inicial
public class AvlTree {private AvlNode root = null;
/** Retorna a altura da árvore */private static int height ( AvlNode t ) {
return t == null ? 0 : t.height;}
/** Retorna o maior valor ente lhs e rhs. */private static int max ( int lhs, int rhs ) {
return lhs > rhs ? lhs : rhs;}
/** Retorna o fator de balanceamento da árvore com raiz t */private int getFactor (AvlNode t) {
return height( t.left ) - height( t.right );}
![Page 13: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/13.jpg)
AVL AVL –– Rotação Simples à DireitaRotação Simples à Direita
k2
k1
x y
z
k1
k2
y z
xRotação Direita
private static AvlNode doRightRotation( AvlNode k2 ) {AvlNode k1 = k2.left;k2.left = k1.right;k1.right = k2;k2.height = max( height( k2.left ), height( k2.right ) ) + 1;k1.height = max( height( k1.left ), k2.height ) + 1;return k1;
}
![Page 14: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/14.jpg)
AVL AVL –– Rotação Simples à DireitaRotação Simples à Direita
42
15 88
6 27
1
Incluir 4
42
15 88
6 27
2
01
1 0
40
0 0
0 0
![Page 15: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/15.jpg)
AVL AVL –– Rotação Simples à DireitaRotação Simples à Direita
RotaçãoDireita
42
15 88
6 27
15
6 42
4 27
0
01
0 0880
Ajustado!
2
1 0
1 0
40
![Page 16: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/16.jpg)
AVL AVL –– Rotação Simples à EsquerdaRotação Simples à EsquerdaToda vez que uma subToda vez que uma sub--árvore fica com um árvore fica com um fator:fator:•• negativonegativo e sua sube sua sub--áárvore da direita tambrvore da direita tambéém tem m tem
um fator um fator negativo negativo 120
100 130
150
200
80 110
Rotação Esquerda
-1
0
0 0
0
-2
-1
120
100 150
80 110 130 200
Completamente BalanceadaFB = 0
![Page 17: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/17.jpg)
AVL AVL –– Rotação Simples à EsquerdaRotação Simples à Esquerdak2
k1
x y
z
k1
k2
y z
x
Rotação Esquerda
private static AvlNode doLeftRotation( AvlNode k1 ) {AvlNode k2 = k1.right;k1.right = k2.left;k2.left = k1;k1.height = max( height( k1.left ), height( k1.right ) ) + 1;k2.height = max( height( k2.right ), k1.height ) + 1;return k2;
}
![Page 18: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/18.jpg)
AVL AVL –– Rotação Simples à EsquerdaRotação Simples à Esquerda
42
15 88
9467
-1
00
0 0
Incluir 90
42
15 88
9467
-2
-10
0 1
900
![Page 19: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/19.jpg)
AVL AVL –– Rotação Simples à EsquerdaRotação Simples à Esquerda
88
42 94
9067
0
Ajustado!
42
15 88
9467
-2
RotaçãoEsquerda0 -1 0 1
0150 1 00
900
![Page 20: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/20.jpg)
AVL AVL –– Rotação Dupla à DireitaRotação Dupla à DireitaToda vez que uma subToda vez que uma sub--árvore fica com um árvore fica com um fator:fator:•• positivopositivo e sua sube sua sub--áárvore da esquerda tem um rvore da esquerda tem um
fator fator negativonegativo120
110 150
80
100
130 200
Rotação DuplaDireita
1
2
-1
0 0
0
0
![Page 21: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/21.jpg)
AVL AVL –– Rotação Dupla à Rotação Dupla à DireitaDireita
DIREITA
ESQUERDA
120
110 150
80
100
130 200
120
110 150
100
80
130 200
120
100 150
80 110 130 200
![Page 22: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/22.jpg)
AVL AVL –– Rotação Dupla à DireitaRotação Dupla à Direitak3
k1
a
b
d
k2
k3
c d
Rotação Esquerda
k2
c
k1
a b
k3
k2
c
a
d
k1
b
RotaçãoDireita
1
2
![Page 23: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/23.jpg)
AVL AVL –– Rotação Dupla à DireitaRotação Dupla à Direita
Rotação DuplaDireita
k3
k1
a
b
d
k2
c
k2
k3
c d
k1
a b
private static AvlNode doDoubleRightRotation( AvlNode k3 ) {
k3.left = doLeftRotation( k3.left );return doRightRotation( k3 );
}
![Page 24: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/24.jpg)
AVL AVL –– Rotação Dupla à DireitaRotação Dupla à Direita
42
15 88
276
Incluir 34
42
15 88
276
2
0-1
-10
34 0
1
0 0
0 0
![Page 25: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/25.jpg)
AVL AVL –– Rotação Dupla à DireitaRotação Dupla à Direita
Rotação DuplaDireita
PASSO 1Rotação Esquerda
42
15 88
276
242
27 88
3415
2
01
1
6
0
-1 0
0 -1
34 00
![Page 26: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/26.jpg)
AVL AVL –– Rotação Dupla à DireitaRotação Dupla à DireitaPASSO 2
Rotação DireitaRotação
DuplaDireita 27
15 42
34
42
27 88
3415
02
1 01 0
6 0 08801 0
60
![Page 27: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/27.jpg)
AVL AVL –– Rotação Dupla à EsquerdaRotação Dupla à EsquerdaToda vez que uma subToda vez que uma sub--árvore fica com um árvore fica com um fator:fator:•• negativonegativo e sua sube sua sub--áárvore da direita tem um fator rvore da direita tem um fator
positivopositivo120
100 130
200
150
80 110
Rotação Dupla
Esquerda
-1
-2
1
00
0
0
![Page 28: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/28.jpg)
AVL AVL –– Rotação Dupla à EsquerdaRotação Dupla à Esquerda
DIREITA
120
100 130
200
150
80 110
ESQUERDA
120
100 130
150
200
80 110
120
100 150
80 110 130 200
![Page 29: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/29.jpg)
AVL AVL –– Rotação Dupla à EsquerdaRotação Dupla à Esquerdak1
k3
d
b
a
k2
c
ROTAÇÃO DIREITA
k1
k2
b
c
a
k3
dk2
k3
c d
k1
a b
ROTAÇÃOESQUERDA
![Page 30: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/30.jpg)
AVL AVL –– Rotação Dupla à EsquerdaRotação Dupla à Esquerda
k1
k3
d
b
a
k2
c
Rotação Dupla
Esquerda
k2
k3
c d
k1
a b
private static AvlNode doDoubleLeftRotation (AvlNode k1) {k1.right = doRightRotation( k1.right );return doLeftRotation( k1 );
}
![Page 31: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/31.jpg)
AVL AVL –– InserçãoInserção• Percorre-se a árvore verificando se a chave já existe ou não
• Em caso positivo, encerra a tentativa de inserção• Caso contrário, a busca encontra o local correto de inserção
do novo nó
• Verifica-se se a inclusão tornará a árvore desbalanceada• Em caso negativo, o processo termina• Caso contrário, deve-se efetuar o balanceamento da árvore
• Descobre-se qual a operação de rotação a ser executada
• Executa-se a rotação
![Page 32: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/32.jpg)
AVL AVL –– Método para inserçãoMétodo para inserçãoprivate AvlNode insert (int x, AvlNode t) {
if( t == null ) t = new AvlNode( x, null, null );else if( x<t.key ) t.left = insert( x, t.left );else if( x>t.key) t.right = insert( x, t.right );if ( getFactor(t) == 2 ) {
if (getFactor (t.left)>0) t = doRightRotation( t );else t = doDoubleRightRotation( t );
}else if ( getFactor(t) == -2 ) {
if ( getFactor(t.right)<0 ) t = doLeftRotation( t );else t = doDoubleLeftRotation( t );
}t.height = max( height( t.left ), height( t.right ) ) + 1;return t;
}
public boolean insert (int x) {// se nó já existe, retorna falseroot = insert (x, root);return true;
}
![Page 33: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/33.jpg)
AVL AVL –– ExclusãoExclusão• Caso parecido com as inclusões;• No entanto, nem sempre se consegue solucionar com
uma única rotação;• Remover elemento e retornar do pai do nó removido
até a raiz, verificando se cada nó do caminho precisa ser balanceado.
![Page 34: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/34.jpg)
AVL AVL –– ExclusãoExclusão32
16
8
48
24 40 56
28 36 44 52 60
58 62
Excluindo 8
-1
-1
0
-1
-1
0
0 0
-1
0 0
0 0
0
![Page 35: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/35.jpg)
AVL AVL –– ExclusãoExclusão32
16 48
24 40 56
28 36 44 52 60
58 62
0
-1
-2
-1
-1
-1
0
0
000
0
rotação simples à esquerda
0
![Page 36: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/36.jpg)
AVL AVL –– ExclusãoExclusão32
24 48
16 40 5628
36 44 52 60
58 62
00
0
0 0
0 0
00
-10
-1
rotação simples à esquerda
volta recursivamente até a raiz, balanceando todos os nós que se encontrarem desbalanceados.
![Page 37: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/37.jpg)
AVL AVL –– ExclusãoExclusão
32
24
48
16
40
56
28 36 44
52 60
58 620 0
0
0 0
0
0
00
00
-1
0
![Page 38: Introdução a árvores AVL · 2012-08-23 · 100 80 130 200 1 0 0 0 120 100 150 80 110 130 200 0 0 0 0 0 00 2 1 0. AVL – Rotação Simples à Direita k2 k1 x y z Nó k2 é a raiz](https://reader033.vdocuments.pub/reader033/viewer/2022042802/5f3a4df125e31178221bf2fb/html5/thumbnails/38.jpg)
AVL AVL -- ComplexidadeComplexidade• Uma única reestruturação é O(1)
• usando uma árvore binária implementada com estrutura ligada
• Pesquisa é O(log n)• altura de árvore é O(log n), não necessita reestruturação
• Inserir é O(log n)• busca inicial é O(log n)• reestruturação para manter balanceamento é O(log n)
• Remover é O(log n)• busca inicial é O(log n)• reestruturação para manter balanceamento é O(log n)