Escolar Documentos
Profissional Documentos
Cultura Documentos
ÁRVORE AVL
Prof. André Backes
Problema do balanceamento
2
1
22/04/2019
Problema do balanceamento
3
Problema do balanceamento
4
2 fb = -7
3 fb = -6
10 fb = +5
4 fb = -4
5 fb = -3
9 fb = +2
fb = 0 7
fb = 0 6 8 fb = 0
2
22/04/2019
Problema do balanceamento
5
Árvore AVL
6
Definição
Tipo de árvore binária balanceada com relação a
altura das suas sub-árvores
Criada por Adelson-Velskii e Landis, de onde
recebeu a sua nomenclatura, em 1962
3
22/04/2019
Árvore AVL
7
Definição
Permite o rebalanceamento local da árvore
Apenas a parte afetada pela inserção ou remoção é
rebalanceada
Usa rotações simples ou duplas na etapa de
rebalanceamento
Executadas a cada inserção ou remoção
As rotações buscam manter a árvore binária como
uma árvore quase completa
Custo máximo de qualquer algoritmo é O(log N)
Árvore AVL
8
4
22/04/2019
Árvore AVL
9
fb = 0 fb = 0
fb = 0 fb = 0
Árvore AVL
10
fb = -1
4
fb = 0 fb = 0
2 7
fb = 0 fb = 0
1 3 5 fb = -1 9 fb = 0
fb = 0 6 8 10
fb = 0 fb = 0
5
22/04/2019
Definindo a árvore
Criação e destruição: igual a da árvore binária
6
22/04/2019
Rotações
13
Rotações
14
7
22/04/2019
Rotações
15
Rotações
16
8
22/04/2019
Rotação LL
17
Rotação LL
18
Exemplo
fb = +2
A
fb = 0
fb = +1 Rotação LL B
B em A fb = 0 fb = 0
fb = 0 >A
C A
C >B
<A
>B
<C >C <A >A
<C >C
9
22/04/2019
Rotação LL
Rotação LL
20
Passo a passo
A fb = +1
D fb = 0 E fb = 0
10
22/04/2019
Rotação LL
21
Passo a passo
Inserção do nó F na árvore
*raiz A fb = +2
Árvore fica desbalanceada
no nó A.
no B fb = +1 C fb = 0
Aplicar Rotação LL no nó A
D fb = +1 E fb = 0
no = (*raiz)->esq;
(*raiz)->esq = no->dir;
F fb = 0 no->dir = *raiz;
*raiz = no;
Rotação LL
22
Passo a passo
*raiz B fb = 0
D fb = +1 A fb = 0 Árvore Balanceada
F fb = 0 E fb = 0 C fb = 0
11
22/04/2019
Rotação RR
23
Rotação RR
24
Exemplo
fb = -2
A
fb = -1 fb = 0
Rotação RR B
B
em A fb = 0 fb = 0
<A fb = 0
A C
C
>A
<B
>A
<A <B <C >C
<C >C
12
22/04/2019
Rotação RR
Rotação RR
26
Passo a passo
A fb = -1
D fb = 0 E fb = 0
13
22/04/2019
Rotação RR
27
Passo a passo
Inserção do nó F na árvore
*raiz A fb = -2
Árvore fica desbalanceada
no
no nó A.
B fb = 0 C fb = -1
Aplicar Rotação RR no nó A
D fb = 0 E fb = -1
no = (*raiz)->dir;
(*raiz)->dir = no->esq;
F fb = 0 no->esq = (*raiz);
(*raiz) = no;
Rotação RR
28
Passo a passo
*raiz C fb = 0
Árvore Balanceada
A fb = 0 E fb = -1
B fb = 0 D fb = 0 F fb = 0
14
22/04/2019
Rotação LR
29
Rotação LR
30
fb = -1 B fb = +1 C
>A
>A
Rotação RR
<B C fb = 0 em B fb = 0 B >C
<A >B
15
22/04/2019
Rotação LR
31
<B <C
<A >B
Rotação LR
32
Passo a passo
A fb = +1
D fb = 0 E fb = 0
16
22/04/2019
Rotação LR
33
Passo a passo
A fb = +2 Inserção do nó F na árvore
D fb = 0 E fb = +1 Aplicar Rotação LR no nó A.
Isso equivale a:
F fb = 0
- Aplicar a Rotação RR no nó B
- Aplicar a Rotação LL no nó A
Rotação LR
34
Passo a passo
A fb = +2
D fb = 0 F fb = 0
17
22/04/2019
Rotação LR
35
Passo a passo
D fb = 0 F fb = 0 C fb = 0
Rotação RL
36
18
22/04/2019
Rotação RL
37
Exemplo
A fb = -2 A fb = -2
B fb = +1 C fb = -1
<A
Rotação LL <A
em B
C fb = 0 >B <C B fb = 0
>A <B
Rotação RL
38
Exemplo
A fb = -2 fb = 0
C
C fb = -1 Rotação RR fb = 0 fb = 0
<A em A A B
<C B fb = 0
<B
<C >C >B
<A <B <B >A
>C >B
<B >A
19
22/04/2019
Rotação RL
39
Passo a passo
A fb = -1
D fb = 0 E fb = 0
Rotação RL
40
Passo a passo
A fb = -2 Inserção do nó F na árvore
D fb = -1 E fb = 0 Aplicar Rotação RL no nó A.
Isso equivale a:
F fb = 0 - Aplicar a Rotação LL no nó C
- Aplicar a Rotação RR no nó A
20
22/04/2019
Rotação RL
41
Passo a passo
A fb = -2
C fb = 0
F fb = 0 E fb = 0
Rotação RL
42
Passo a passo
D fb = 0
Árvore após aplicar a
Rotação RR no nó A
fb = +1 A C fb = 0
Árvore Balanceada
B fb = 0 F fb = 0 E fb = 0
21
22/04/2019
Fator de Fator de
Posições dos nós B e C em
Balanceamento Balanceamento Rotação
relação ao nó A
de A de B
B é filho à esquerda de A
+2 +1 LL
C é filho à esquerda de B
B é filho à direita de A
-2 -1 RR
C é filho à direita de B
B é filho à esquerda de A
+2 -1 LR
C é filho à direita de B
B é filho à de direita A
-2 +1 RL
C é filho à esquerda de B
22
22/04/2019
23
22/04/2019
Inserção
24
22/04/2019
Inserção
Inserção
25
22/04/2019
Passo a passo
Insere valor: 1
fb = 0
1
Insere valor: 2
fb = -1
1
2 fb = 0
Passo a passo
Insere valor: 10
fb = -1
2
fb = 0 fb = -1
1 3
10 fb = 0
26
22/04/2019
Passo a passo
Passo a passo
5 fb = 0
27
22/04/2019
Passo a passo
Insere valor: 9 Nó “10” desbalanceado
Aplicar Rotação LR
fb = -1 fb = 0
4 4
fb = 0 fb = +2 fb = 0 fb = 0
2 10 2 9
1 3 5 fb = -1 1 3 5 10
fb = 0 fb = 0 fb = 0 fb = 0 fb = 0 fb = 0
fb = 0 9
28
22/04/2019
Remoção
Trabalha com 2 funções
Buscapelo nó
Remoção do nó com 2 filhos
29
22/04/2019
Remoção
Remoção
30
22/04/2019
Pai tem 1 ou
nenhum filho
Corrige a
altura
Remoção
Procura pelo nó
mais a esquerda
31
22/04/2019
Passo a passo
Remove valor: 2
fb = +1 4 fb = +1 4
fb = 0 fb = 0 fb = +1 fb = 0
2 7 3 7
1 3 1
fb = 0 fb = 0 fb = 0
Passo a passo
Remove valor: 7
fb = +1 fb = +2
4 4 fb = 0 3
fb = 0 fb = 0 fb = +1
3 7 3 1 4
fb = 0 fb = 0
1 fb = 0 1
fb = 0 Nó desbalanceado
Aplicar Rotação LL
32
22/04/2019
Material Complementar
65
Vídeo Aulas
Aula 78 – Árvores Balanceadas:
youtu.be/Au-6c55J90c
Aula 79: Árvore AVL: Definição:
youtu.be/4eO3UbTiRyo
Aula 80: Árvore AVL: Implementação:
youtu.be/I5cl39jdnow
Aula 81: Árvore AVL: Tipos de Rotação:
youtu.be/1HkWqH7L2rU
Aula 82: Árvore AVL: Implementando as Rotações:
youtu.be/6OJ8stXwdq0
Aula 83: Árvore AVL: Inserção:
youtu.be/lQsVUxa3Auk
Aula 84: Árvore AVL: Remoção:
youtu.be/F7_Daymw-WM
33