Post on 05-Dec-2018
SCE 182 – Algoritmos e Estruturas de Dados I
Árvores AVL (Balanceadas )
Profª.Drª. Roseli Ap. Francelin Romero
Fonte: Profa. Patrícia Marchetti
Revisão: Gedson Faria
SCC122 – Estruturas de Dados
Roseli A. F. Romero
Árvores AVL – (Balanceadas) Definição
� A altura de uma árvore binária é o nível máximo de suas folhas (profundidade)
� Uma árvore binária balanceada (AVL) é uma árvore binária na qual as alturas das duas subárvores de todo nó nunca difere em mais de 1.
� O balanceamento de um NÓ é definido como a altura de sua subárvore esquerda menos a altura de sua subárvore direita.
Roseli A. F. Romero
Árvores AVL – (Balanceadas) Definição
� Cada nó numa árvore binária balanceada (AVL) tem balanceamento de 1, -1 ou 0.
� Se o valor do balanceamento do nó for diferente de 1, -1 e 0. Essa árvore não é balanceada (AVL).
� Observe o exemplo a seguir:
Roseli A. F. Romero
1
0
0 0
Árvores AVL (Balanceada) – Exemplo
0
0
0
1 -1
00
0 0 0 0
0
-1
Roseli A. F. Romero
Árvores AVL – (Balanceadas)� Se a probabilidade de pesquisar um
dado for a mesma para todos os dados, uma árvore binária balanceada determinará a busca mais eficiente.
� Mas os algoritmos de inserção e remoção já vistos até agora não garantem que essa árvore permanecerá balanceada.
Roseli A. F. Romero
Árvores AVL (Balanceada) – Exemplo
B B
B B B BU1 U2 U3 U4
U5 U6 U7 U8U9 U10
U11 U12
B – inserções
que mantêm
a árvore
balanceada.
Un – inserções não
balanceadas.
Roseli A. F. Romero
Árvores Balanceadas - AVL� O desbalanceamento ocorre quando:
� O NÓ é inserido é um descendente esquerdo de um nó que tinha balanceamento de 1 (U1 até U8)
OU
� Se ele for um descendente direito de um nó que tinha balanceamento de –1 (U9 até U12).
Roseli A. F. Romero
Árvores AVL (Balanceadas)� Para manter uma árvore balanceada, é
necessário fazer uma transformação na árvore tal que:
1. o percurso em ordem da árvore transformada seja o mesmo da árvore original (isto é, a árvore transformada continue sendo um árvore de busca binária);
2. a árvore transformada fique balanceada.
Roseli A. F. Romero
Árvores AVL (Balanceadas)� A transformação a ser feita na árvore tal que
ela se mantenha balanceada é chamada de rotação.
� A rotação poderá ser feita à esquerda ou à direita dependendo do desbalanceamento que tiver que ser solucionado.
� A rotação deve ser realizada de maneira que as regras 1 e 2 da transp. Anterior sejam respeitadas.
� Dependendo do desbalanceamento a ser solucionado, apenas uma rotação não será suficiente para resolvê-lo.
Roseli A. F. Romero
Árvores AVL – Rotação DIREITA
D
C
F G
A
B
M
E
J K LH I
P QN OR
DESBALANCEOU!
SOLUÇÃO: ROTAÇÃO DIREITA
Percurso
em Ordem:
RHDIBEANJ
OFKCLGPMQ
Roseli A. F. Romero
Árvores AVL – Rotação DIREITA
C
F G
A
ME
J K L
H
I
P QN O
R
ROTAÇÃO DIREITACONCLUÍDA
B
D
ÁRVORE ESTÁ NOVAMENTE BALANCEADA!!!
Percurso
em Ordem:
RHDIBEANJ
OFKCLGPMQ
Roseli A. F. Romero
Árvores AVL – Rotação ESQUERDA
D
C
F G
A
B
M
E
J K LH I
P QO
R
DESBALANCEOU!
ROTAÇÃO ESQUERDA
N
Percurso
em Ordem:
HDIBEAJFRN
KOCLGPMQ
Roseli A. F. Romero
Árvores AVL (Balanceadas)� Nos 2 exemplos anteriores de rotação a
esquerda e a direita as duas regras foram mantidas:
� o percurso em ordem da árvore transformada deve ser o mesmo da árvore original (isto é, a árvore transformada continue sendo um árvore de busca binária);
� a árvore transformada continua balanceada.
Roseli A. F. Romero
Árvores AVL (Balanceadas)� Para o rebalanceamento da árvore é
necessário calcular o Fator de Balanceamentopara verificar qual rotação deve ser efetuadaafim de rebalanceá-la.
� FB = h da subárvore direita - h da subárvoreesquerda
� Se FB é negativo, as rotações são feitas à direita
� Se FB é positivo, as rotações são feitas à esquerda
Roseli A. F. Romero
Árvores AVL (Balanceadas)� Há dois tipos de ocorrências nos casos
de balanceamento:
� Caso1 : Nó raiz com FB 2 ou –2 com um filho (na direção de onde houve a inserção) com FB 1 ou –1 com o mesmo sinal, neste caso a solução é uma rotação simples.
Roseli A. F. Romero
Árvores AVL (Balanceadas)
4
8
10
9 15
12
FB(raiz)= Hd - He 4 - 2 = 2
FB(10)= Hd – He 3 - 2 = 1
Nó inserido
Solução: rotação à esquerda do nó 8, ou raiz.
Roseli A. F. Romero
Árvores AVL (Balanceadas)
4
8
10
9
15
12
Nó inserido
Solução: rotação à esquerda do nó 8, ou raiz.
Roseli A. F. Romero
Árvores AVL (Balanceadas)
� Caso 2: Nó raiz com FB 2 ou –2 com um filho(na direção de onde houve a inserção) com FB -1 ou 1 os quais possuem sinais trocados, neste caso a solução é uma rotação dupla.
� Primeiro rotaciona-se o nó com fator de balanceamento 1 ou –1 na direção apropriadae depois rotaciona-se o nó cujo fator de balanceamento seja 2 ou –2 na direção oposta
Roseli A. F. Romero
Árvores AVL (Balanceadas)
4
8
10
2 6
5
FB(raiz)= 2 - 4 = -2
FB(4)= 2 - 1 = 1
Nó inserido
Solução: rotação do nó 4 à esquerda Rotação do nó 8 à direita.
Roseli A. F. Romero
Árvores AVL (Balanceadas)
Solução: rotação do nó 4 à esquerda Rotação do nó 8 à direita.
4
8
10
2 6
5
Nó inserido4
8
10
2
6
5
4 8
102
6
5
Roseli A. F. Romero
Árvores AVL (Balanceadas)
Algoritmo de Rotação à direita:
void rot_dir(NODEPTR p){NODEPTR q, temp;q = p->esq;temp = q->dir;q->dir = p;p->esq = temp;p = q;
}
4
8
10
2 6
5
4
2
5
p
q
temp
106
8
p
Roseli A. F. Romero
Árvores AVL (Balanceadas)
Algoritmo de Rotação à esquerda:
void rot_esq(NODEPTR p){NODEPTR q, temp;q = p->dir;temp = q->esq;q->esq = p;p->dir = temp;p = q;
}
15
8
2
209
17
p
q
temp
15
20
172 9
8
p
Roseli A. F. Romero
Árvores AVL (Balanceadas)
4
8
10
2 6
5
p
Algoritmo de Rotação a direita no caso 2:
void rot_esq_dir(NODEPTR p){rot_esq(p->esq);rot_dir(p);
}
Roseli A. F. Romero
Árvores AVL (Balanceadas)
Algoritmo de Rotação à esquerda no caso 2:
void rot_dir_esq(NODEPTR p){rot_dir(p->dir);rot_esq(p);
} 15
8
2
209
17
p