Você está na página 1de 30

Algoritmos e Estrutura de Dados

Aula 17 Estrutura de Dados: rvores AVL Prof. Tiago A. E. Ferreira

Introduo
O nome AVL vem de seus criadores Adelson Velskye Landis, cuja primeira referncia encontra-se no documento "Algoritmos para organizao da informao"de 1962. uma rvore de busca binria onde a altura da sub-rvore esquerda e a subrvore direita diferem de no mximo uma unidade.

Altura de Uma rvore

Funo para Retornar Altura de um rvore Binria


Altura(x) SE x = None retorne -1 h1 = Altura(x.esquerda) h2 = Altura(x.direita) retorne (1+Max(h1,h2))

Balanceamento
Uma rvore AVL dita balanceada quando, para cada nodo da rvore, a diferena entre as alturas das suas sub-rvores (direita e esquerda) no maior do que um. Caso a rvore no estiver balanceada necessrio seu balanceamento atravs da rotao simples ou rotao dupla. O balanceamento requerido para as operaes de adio e excluso de elementos.

Fator de Balanceamento
O fator de balanceamento de um nodo dado pelo seu peso em relao a sua subrvore.
Um nodo pode ter um fator balanceado de 1, 0, ou -1. Um nodo com fator de balanceamento -2 ou 2 considerado um rvore no AVL e requer um balanceamento por rotao ou dupla-rotao.

Clculo do Fator de Balanceamento


O fator de balanceamento pode ser dado como:
h(sub-rvore esquerda) h(sub-rvore direita) Ou, h(sub-rvore direita) h(sub-rvore esquerda)
Onde h(x) a altura do nodo x. Essa escolha ir influenciar no momento do balanceamento.

Exemplo de rvores No AVL

Exemplos da rvores AVL

Balanceando uma rvore


Dada uma rvore no balanceada, como balance-la?
Atravs de operaes de rotaes!!!!

Existem 4 operaes de Rotaes:


Rotao Esquerda Rotao Direita Rotao Dupla Esquerda Rotao Dupla Direita

Quando usar as Rotaes


Na insero de um elemento Na remoo de um elemento
provado que no mximo uma rotao suficiente para realizar o balanceamento de uma rvore quando inserido um novo elemento A idia da operao de balanceamento equilibrar o fator de balanceamento da rvore

Exemplo: Rotao Esquerda


A rvore torna-se desbalanceada no nodo de valor 10

Inserindo um novo nodo

Exemplo: Rotao Esquerda

Exemplo: Rotao Esquerda


Recalculando o Fator de Balanceamento

rvore Balanceada

Exemplo: Rotao Direita


A rvore torna-se desbalanceada no nodo de valor 30

Inserindo um novo nodo

Exemplo: Rotao Direita

Exemplo: Rotao Direita


Recalculando o Fator de Balanceamento

rvore Balanceada

Exemplo: Rotao Dupla Esquerda


A rvore torna-se desbalanceada no nodo de valor 10

Inserindo um novo nodo

Exemplo: Rotao Dupla Esquerda

Recalculando o Fator de Balanceamento

NOVO PROBLEMA!!!! Girando no sentido contrrio, volta-se para a rvore inicial!

Exemplo: Rotao Dupla Esquerda


Soluo: Girar primeiro a rvore para a direita!

Agora girar para a esquerda

Exemplo: Rotao Dupla Esquerda

Recalculando o Fator de Balanceamento

Exemplo: Rotao Dupla Direita


A rvore torna-se desbalanceada no nodo de valor 30

Inserindo um novo nodo

Exemplo: Rotao Dupla Direita


Primeiro, rotaciona-se esquerda, e ento direita:

Recalculando o Fator de Balanceamento

Removendo Elemento
Os exemplos vistos so para o balanceamento de uma rvore binria a partir da insero de um novo nodo na rvore Mas e se for desejado remover um determinado nodo da rvore?
Esta tambm ir, provavelmente, necessitar de um balanceamento! Mas como proceder para a remoo de um nodo?

Removendo Elemento

Removendo Elemento
Uma Vez removido o elemento, o fator de balanceamento deve ser recalculado e a rvore balanceada, se necessrio, como as operaes de rotao!
Mas como implementar as operaes de rotao?

Rotao Esquerda

Rotao Esquerda

Rotao Direita
Esta rotao o processo inverso da rotao esquerda... Como seria o seu pseudo-cdigo?