Anda di halaman 1dari 24

SCE 182SCC122

Algoritmos e Estruturas
Estruturas de Dados I
de Dados

rvores AVL (Balanceadas)

Prof.Dr. Roseli Ap. Francelin Romero


Fonte: Profa. Patrcia Marchetti
Reviso: Gedson Faria
rvores AVL (Balanceadas) Definio

A altura de uma rvore binria o nvel


mximo de suas folhas (profundidade)

Uma rvore binria balanceada (AVL) uma


rvore binria na qual as alturas das duas
subrvores de todo n nunca difere em mais
de 1.

O balanceamento de um N definido como


a altura de sua subrvore esquerda menos a
altura de sua subrvore direita.

Roseli A. F. Romero
rvores AVL (Balanceadas) Definio

Cada n numa rvore binria


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 no
balanceada (AVL).

Observe o exemplo a seguir:

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.

Mas os algoritmos de insero e


remoo j vistos at agora no
garantem que essa rvore permanecer
balanceada.

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

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,
necessrio fazer uma transformao 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
binria);
2. a rvore transformada fique
balanceada.

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!

SOLUO: ROTAO DIREITA


Roseli A. F. Romero
rvores AVL Rotao DIREITA
Percurso
A em Ordem:
D C RHDIBEANJ
OFKCLGPMQ
H B
F G

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.

FB = h da subrvore direita - h da subrvore


esquerda

Se FB negativo, as rotaes so feitas


direita

Se FB positivo, as rotaes so feitas


esquerda
Roseli A. F. Romero
rvores AVL (Balanceadas)
H dois tipos de ocorrncias nos casos
de balanceamento:

Caso1: N raiz com FB 2 ou 2 com um


filho (na direo de onde houve a
insero) com FB 1 ou 1 com o mesmo
sinal, neste caso a soluo uma
rotao simples.

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)

Soluo: rotao esquerda


do n 8, ou raiz. 10

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.

Primeiro rotaciona-se o n com fator de


balanceamento 1 ou 1 na direo apropriada
e depois rotaciona-se o n cujo fator de
balanceamento seja 2 ou 2 na direo oposta

Roseli A. F. Romero
rvores AVL (Balanceadas)

FB(raiz)=
8
2 - 4 = -2

4 10
FB(4)=
2 - 1 = 1
2 6

5 Soluo: rotao do n 4 esquerda


Rotao do n 8 direita.
N inserido Roseli A. F. Romero
rvores AVL (Balanceadas)
Soluo: rotao do n 4 esquerda
Rotao do n 8 direita.
8
4 10
2 6 8
6 10
5 6
4 4 8
N inserido

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

Algoritmo de Rotao esquerda:


8 q

void rot_esq(NODEPTR p){ 2 15


NODEPTR q, temp;
q = p->dir; 9 20
temp = q->esq; temp 17
q->esq = p; p
p->dir = temp;
p = q; 15
} 8 20
2 9 17 Roseli A. F. Romero
rvores AVL (Balanceadas)
p
Algoritmo de Rotao a direita no caso 2:
8
void rot_esq_dir(NODEPTR p){ 4 10
rot_esq(p->esq);
rot_dir(p); 2 6
} 5

Roseli A. F. Romero
rvores AVL (Balanceadas)

Algoritmo de Rotao esquerda no caso 2:


p
void rot_dir_esq(NODEPTR p){
rot_dir(p->dir); 8
rot_esq(p);
} 2 15
9 20
17

Roseli A. F. Romero

Anda mungkin juga menyukai