Algoritmos e Estrutura de Dados

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

Introdução
O nome AVL vem de seus criadores Adelson Velskye Landis, cuja primeira referência encontra-se no documento "Algoritmos para organização da informação"de 1962. É uma árvore de busca binária onde a altura da sub-árvore esquerda e a subárvore direita diferem de no máximo uma unidade.

Altura de Uma Árvore

h2)) .esquerda) h2 = Altura(x.direita) retorne (1+Max(h1.Função para Retornar Altura de um Árvore Binária Altura(x) SE x = None retorne -1 h1 = Altura(x.

. O balanceamento é requerido para as operações de adição e exclusão de elementos. a diferença entre as alturas das suas sub-árvores (direita e esquerda) não é maior do que um.Balanceamento Uma árvore AVL é dita balanceada quando. para cada nodo da árvore. Caso a árvore não estiver balanceada é necessário seu balanceamento através da rotação simples ou rotação dupla.

ou -1. Um nodo pode ter um fator balanceado de 1. 0.Fator de Balanceamento O fator de balanceamento de um nodo é dado pelo seu peso em relação a sua subárvore. . Um nodo com fator de balanceamento -2 ou 2 é considerado um árvore não AVL e requer um balanceamento por rotação ou dupla-rotação.

Essa escolha irá influenciar no momento do balanceamento.Cálculo 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.

Exemplo de Árvores Não AVL .

Exemplos da Árvores AVL .

Balanceando uma Árvore Dada uma árvore não balanceada. como balanceá-la? Através de operações de rotações!!!! Existem 4 operações de Rotações: Rotação à Esquerda Rotação à Direita Rotação Dupla à Esquerda Rotação Dupla à Direita .

Quando usar as Rotações Na inserção de um elemento Na remoção de um elemento É provado que no máximo uma rotação é suficiente para realizar o balanceamento de uma árvore quando é inserido um novo elemento A idéia da operação de balanceamento é equilibrar o fator de balanceamento da árvore .

Exemplo: Rotação à Esquerda A árvore torna-se desbalanceada no nodo de valor 10 Inserindo um novo nodo .

Exemplo: Rotação à Esquerda .

Exemplo: Rotação à Esquerda Recalculando o Fator de Balanceamento Árvore Balanceada .

Exemplo: Rotação à Direita A árvore torna-se desbalanceada no nodo de valor 30 Inserindo um novo nodo .

Exemplo: Rotação à Direita .

Exemplo: Rotação à Direita Recalculando o Fator de Balanceamento Árvore Balanceada .

Exemplo: Rotação Dupla à Esquerda A árvore torna-se desbalanceada no nodo de valor 10 Inserindo um novo nodo .

Exemplo: Rotação Dupla à Esquerda Recalculando o Fator de Balanceamento NOVO PROBLEMA!!!! Girando no sentido contrário. volta-se para a árvore inicial! .

Exemplo: Rotação Dupla à Esquerda Solução: Girar primeiro a árvore para a direita! Agora girar para a esquerda .

Exemplo: Rotação Dupla à Esquerda Recalculando o Fator de Balanceamento .

Exemplo: Rotação Dupla à Direita A árvore torna-se desbalanceada no nodo de valor 30 Inserindo um novo nodo .

e então à direita: Recalculando o Fator de Balanceamento .Exemplo: Rotação Dupla à Direita Primeiro. rotaciona-se à esquerda.

provavelmente. necessitar de um balanceamento! Mas como proceder para a remoção de um nodo? .Removendo Elemento Os exemplos vistos são para o balanceamento de uma árvore binária a partir da inserção de um novo nodo na árvore Mas e se for desejado remover um determinado nodo da árvore? Esta também irá.

.

Removendo Elemento .

o fator de balanceamento deve ser recalculado e a árvore balanceada.Removendo Elemento Uma Vez removido o elemento. como as operações de rotação! Mas como implementar as operações de rotação? . se necessário.

Rotação à Esquerda .

Rotação à Esquerda .

.Rotação à Direita Esta rotação é o processo inverso da rotação à esquerda.. Como seria o seu pseudo-código? .