Você está na página 1de 24

SCE 182SCC122

– Algoritmos e Estruturas
– Estruturas de Dados I
de Dados

Árvores AVL (Balanceadas)

Profª.Drª. Roseli Ap. Francelin Romero


Fonte: Profa. Patrícia Marchetti
Revisão: Gedson Faria
Á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
Á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 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 – inserções
que mantêm
a árvore
balanceada.

B B

B BB B
U1 U2 U3 U4

Un – inserções não
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, é
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
Percurso
A
C em Ordem:
B RHDIBEANJ
OFKCLGPMQ
D E F G

H I J K L M

R
N O P Q
DESBALANCEOU!

SOLUÇÃO: ROTAÇÃO DIREITA


Roseli A. F. Romero
Árvores AVL – Rotação DIREITA
Percurso
A em Ordem:
D C RHDIBEANJ
OFKCLGPMQ
H B
F G

R I E
J K L M
ROTAÇÃO DIREITA
CONCLUÍDA
N O P Q
ÁRVORE ESTÁ NOVAMENTE BALANCEADA!!!
Roseli A. F. Romero
Árvores AVL – Rotação 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
ROTAÇÃO ESQUERDA 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 Balanceamento
para verificar qual rotação deve ser efetuada
afim de rebalanceá-la.

FB = h da subárvore direita - h da subárvore


esquerda

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)

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

FB(10)= Hd – He
4 10
3 - 2 = 1

9 15
Solução: rotação à esquerda
do nó 8, ou raiz. 12
RoseliNó inserido
A. F. Romero
Árvores AVL (Balanceadas)

Solução: rotação à 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 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 apropriada
e depois rotaciona-se o nó cujo fator de
balanceamento seja 2 ou –2 na direção oposta

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

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

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

5 Solução: rotação do nó 4 à esquerda


Rotação do nó 8 à direita.
Nó inserido Roseli A. F. Romero
Árvores AVL (Balanceadas)
Solução: rotação do nó 4 à esquerda
Rotação 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 Rotação à 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 Rotação à 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 Rotação 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 Rotação à 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

Você também pode gostar