Algoritmos e Estruturas
Estruturas de Dados I
de Dados
Roseli A. F. Romero
rvores AVL (Balanceadas) Definio
Roseli A. F. Romero
rvores AVL (Balanceada) Exemplo
-1
0
1
1 -1
0 0
0 0 0 0
0 0
0 0 0 0
Roseli A. F. Romero
rvores AVL (Balanceadas)
Se a probabilidade de pesquisar um
dado for a mesma para todos os dados,
uma rvore binria balanceada
determinar a busca mais eficiente.
Roseli A. F. Romero
rvores AVL (Balanceada) Exemplo
B inseres
que mantm
a rvore
balanceada.
B B
B BB B
U1 U2 U3 U4
Un inseres no
balanceadas. U9 U10
U5 U6 U7 U8 U11 U12
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
Roseli A. F. Romero
rvores AVL (Balanceadas)
A transformao a ser feita na rvore tal que
ela se mantenha balanceada chamada de
rotao.
A rotao poder ser feita esquerda ou
direita dependendo do desbalanceamento que
tiver que ser solucionado.
A rotao deve ser realizada de maneira que
as regras 1 e 2 da transp. Anterior sejam
respeitadas.
Dependendo do desbalanceamento a ser
solucionado, apenas uma rotao no ser
suficiente para resolv-lo.
Roseli A. F. Romero
rvores AVL Rotao DIREITA
Percurso
A
C em Ordem:
B RHDIBEANJ
OFKCLGPMQ
D E F G
H I J K L M
R
N O P Q
DESBALANCEOU!
R I E
J K L M
ROTAO DIREITA
CONCLUDA
N O P Q
RVORE EST NOVAMENTE BALANCEADA!!!
Roseli A. F. Romero
rvores AVL Rotao ESQUERDA
A Percurso
B C em Ordem:
HDIBEAJFRN
KOCLGPMQ
D E F G
H I J K L M
DESBALANCEOU!
N O P Q
R
ROTAO ESQUERDA Roseli A. F. Romero
rvores AVL (Balanceadas)
Nos 2 exemplos anteriores de rotao 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 binria);
a rvore transformada continua
balanceada.
Roseli A. F. Romero
rvores AVL (Balanceadas)
Para o rebalanceamento da rvore
necessrio calcular o Fator de Balanceamento
para verificar qual rotao deve ser efetuada
afim de rebalance-la.
Roseli A. F. Romero
rvores AVL (Balanceadas)
FB(raiz)= Hd - He
4 - 2 = 2
8
FB(10)= Hd He
4 10
3 - 2 = 1
9 15
Soluo: rotao esquerda
do n 8, ou raiz. 12
RoseliN inserido
A. F. Romero
rvores AVL (Balanceadas)
8 15
4 9 12
N inserido
Roseli A. F. Romero
rvores AVL (Balanceadas)
Caso 2: N raiz com FB 2 ou 2 com um filho
(na direo de onde houve a insero) com FB
-1 ou 1 os quais possuem sinais trocados,
neste caso a soluo uma rotao dupla.
Roseli A. F. Romero
rvores AVL (Balanceadas)
FB(raiz)=
8
2 - 4 = -2
4 10
FB(4)=
2 - 1 = 1
2 6
2 5 2 5 10
Roseli A. F. Romero
rvores AVL (Balanceadas)
p
Algoritmo de Rotao direita:
q 8
void rot_dir(NODEPTR p){ 4 10
NODEPTR q, temp;
q = p->esq; 2 6
temp
temp = q->dir; 5
q->dir = p; p
p->esq = temp;
p = q; 4
} 2 8
5 6 10
Roseli A. F. Romero
rvores AVL (Balanceadas)
p
Roseli A. F. Romero
rvores AVL (Balanceadas)
Roseli A. F. Romero