Post on 17-Apr-2015
11/04/23 EDA - Prof. Paulemir Campos 1
Pesquisas de Dados(Parte 2)
UPE – Caruaru – Sistemas de InformaçãoDisciplina: Estrutura de Dados e ArquivoProf.: Paulemir G. Campos
11/04/23 EDA - Prof. Paulemir Campos 2
Conteúdo
Árvores AVL Definição; Exemplo e contra-exemplo; Balanceamento; Exemplo de rotação dupla.
Referências
11/04/23 EDA - Prof. Paulemir Campos 3
Árvores AVL
11/04/23 EDA - Prof. Paulemir Campos 4
Árvores AVL: Definição
Árvore criada por Adelson-Velskii e Landis, daí o nome Árvore AVL;
É uma árvore de pesquisa binária balanceada cujo módulo da diferença entre as alturas das sub-árvores esquerda e direita de cada nó nunca é maior do que 1.
11/04/23 EDA - Prof. Paulemir Campos 5
Em outras palavras, o valor do balanceamento de cada nó de uma árvore AVL é igual a 1, 0 ou –1.
Caso contrário, a árvore binária não é AVL, pois estará desbalanceada.
Árvores AVL: Definição
11/04/23 EDA - Prof. Paulemir Campos 6
1
0
0
-1
0
0 0
1
0
0 0
0
0 0
-1
0 0
Árvores AVL: Exemplo
11/04/23 EDA - Prof. Paulemir Campos 7
Exemplo de Árvore não-AVL
1
0
0
-1
0
0 0
1
0
0 0
0
0 0
-2
0
Árvores AVL: Contra-exemplo
11/04/23 EDA - Prof. Paulemir Campos 8
Balanceamento de Árvore Binária por Rotação Esquerda:
ponteiro tArvore GiraEsquerda (ponteiro tArvore raiz) {
ponteiro tArvore novaRaiznovaRaiz = raiz->direitoraiz->direito = novaRaiz->esquerdonovaRaiz->esquerdo = raizretorna novaRaiz
}
Árvores AVL: Balanceamento
11/04/23 EDA - Prof. Paulemir Campos 9
A
Árvores AVL: Balanceamento Exemplo de balanceamento por
rotação esquerda.
B
F G
C
D E
C
E
G
F
A
B D
-2
0
00
1 -1
0
1
-1
0 0
0
-1
0
11/04/23 EDA - Prof. Paulemir Campos 10
Árvores AVL: Balanceamento
Balanceamento de Árvore Binária por Rotação Direita:
ponteiro tArvore GiraDireita (ponteiro tArvore raiz) {
ponteiro tArvore novaRaiznovaRaiz = raiz->esquerdoraiz->esquerdo = novaRaiz->direitonovaRaiz->direito = raizretorna novaRaiz
}
11/04/23 EDA - Prof. Paulemir Campos 11
Árvores AVL: Balanceamento Exemplo de balanceamento por
rotação direita.
F G
B
D E
B
A
C
D
F
0
0
1 -1
0
-1
1
0
1
0E
-1
G0
A
C
2
0
11/04/23 EDA - Prof. Paulemir Campos 12
Árvores AVL: Balanceamento
Características:
Quando se efetua uma rotação esquerda ou direita numa árvore de pesquisa binária, a ordem dos elementos percorrendo-a em ordem central não se altera.
Isto é, a árvore de pesquisa binária continua ordenada.
11/04/23 EDA - Prof. Paulemir Campos 13
Árvores AVL: Balanceamento Características:
Árvore desbalanceada com valor negativo pode ser balanceada com rotação esquerda;
Árvore desbalanceada com valor positivo pode ser balanceada com rotação direita.
11/04/23 EDA - Prof. Paulemir Campos 14
Árvores AVL: Balanceamento Descrição das rotações nos seguintes casos:
Diferença de altura do nó
desbalanceado (hSE-hSD)
Diferença de altura do nó filho do nó
desbalanceado (hSE-hSD)
Tipo de Rotação
-1 Simples à esquerda
-2 0 Simples à esquerda
1 Dupla com filho à direita e pai à
esquerda
-1 Dupla com filho à esquerda e pai à
direita
2 0 Simples à direita
1 Simples à direita
11/04/23 EDA - Prof. Paulemir Campos 15
Dada a árvore de pesquisa binária ao lado, pede-se para balanceá-la aplicando operações de rotação à esquerda e/ou à direita conforme necessário.
20
25
18
15
19
Árvores AVL: BalanceamentoExemplo de Rotação Dupla
12
11/04/23 EDA - Prof. Paulemir Campos 16
Primeiro aplica-se uma rotação à esquerda no nó 15 da árvore desbalanceada inicial.
20
25
18
15
19
2
-1
1
0
0
20
25
18
19
15
2
2
0
0
0
120
120
Árvores AVL: BalanceamentoExemplo de Rotação Dupla
11/04/23 EDA - Prof. Paulemir Campos 17
Depois, basta aplicar uma rotação à direita no nó 20 da árvore obtida no passo anterior.
19
20
18
15
0
0
0
-1
20
25
18
19
15
2
2
0
0
0
250
120
120
Árvores AVL: BalanceamentoExemplo de Rotação Dupla
Referências
11/04/23 EDA - Prof. Paulemir Campos 18
11/04/23 EDA - Prof. Paulemir Campos 19
ASCENCIO, A. F. G; ARAÚJO, G. S. Estruturas de Dados: algoritmos, análise da complexidade e implementações em JAVA e C/C++. São Paulo: Pearson Prentice Hall, 2010.
Referências
11/04/23 EDA - Prof. Paulemir Campos 20
SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e seus Algoritmos. 2. ed. Rio de Janeiro: LTC, 1994.
Referências