Buscar

Árvore AVL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 36 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 36 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 36 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE FEDERAL DO AMAZONAS 
FACULDADE DE TECNOLOGIA 
ENGENHARIA DA COMPUTAÇÃO 
ALGORITMO E ESTRUTURA DE DADOS II 
 
 
 
 
ÁRVORE AVL 
 
 
 
 
 
 
 
 
Manaus – AM 
2014 
1 
 
AMANDA PÊGO DE PAULA - 21354614 
JOELINE DUTRA DA SILVA - 21353194 
REBECA NUNES RODRIGUES - 21350689 
 
 
 
 
 
 
 
 
ÁRVORE AVL 
 
 
 
 
 
 
 
 
 
 
Manaus – AM 
2014 
Esse trabalho foi solicitado 
como forma de obtenção de 
nota parcial para a disciplina 
Algoritmo e Estrutura de Dados 
II, ministrado pelo Prof.º Edson 
Nascimento. 
2 
 
SUMÁRIO 
 
ÍNDICE DE ILUSTRAÇÕES ........................................................................................ 3 
INTRODUÇÃO ............................................................................................................ 5 
1. O QUE É UMA ÁRVORE AVL ................................................................................. 6 
2. FATOR DE BALANCEAMENTO ............................................................................. 7 
3. ESTRUTURA DE DADOS ....................................................................................... 9 
4. ROTAÇÕES .......................................................................................................... 11 
4.1. Rotação simples para a direita ........................................................................ 11 
4.1.1. Como funciona .......................................................................................... 11 
4.1.2. Passo a passo .......................................................................................... 12 
4.2. Rotação simples para a esquerda ................................................................... 14 
4.2.1. Como funciona .......................................................................................... 14 
4.2.2. Passo a passo .......................................................................................... 15 
4.3. Rotação dupla direita-esquerda ...................................................................... 17 
4.3.1. Como funciona .......................................................................................... 17 
4.3.2. Passo a passo .......................................................................................... 18 
4.4. Rotação dupla esquerda-direita ...................................................................... 21 
4.3.1. Como funciona .......................................................................................... 21 
4.3.2. Passo a passo .......................................................................................... 22 
5. BUSCA EM UMA ÁRVORE AVL ........................................................................... 26 
6. INSERÇÃO EM UMA ÁRVORE AVL .................................................................... 27 
7. REMOÇÃO EM UMA ÁRVORE AVL ..................................................................... 29 
8. IMPRESSÃO EM UMA ÁRVORE AVL .................................................................. 30 
8.1. Imprimir todas as chaves ................................................................................ 30 
8.2. Imprimir em ordem crescente.......................................................................... 30 
8.3. Imprimir em ordem decrescente ...................................................................... 31 
CONCLUSÃO ............................................................................................................ 32 
REFERÊNCIAS ......................................................................................................... 33 
 
3 
 
ÍNDICE DE ILUSTRAÇÕES 
 
Figura 1: Árvore AVL com lado esquerdo maior.......................................................... 7 
Figura 2: Árvore AVL com lado direito maior. .............................................................. 7 
Figura 3: Árvores AVL desbalanceadas. ..................................................................... 8 
Figura 4: Inserção em AVL e FB após a inserção. .................................................... 11 
Figura 5: Rotação simples para direita na AVL. ........................................................ 12 
Figura 6: Passo 1 da rotação para direita. ................................................................ 12 
Figura 7: Passo 2 da rotação para direita. ................................................................ 12 
Figura 8: Passo 3 da rotação para direita. ................................................................ 13 
Figura 9: Passo 4 da rotação para direita. ................................................................ 13 
Figura 10: Antes e depois da rotação para direita. .................................................... 14 
Figura 11: Inserção em AVL e FB. ............................................................................ 14 
Figura 12: Rotação simples para esquerda na AVL. ................................................. 15 
Figura 13: Passo 1 da rotação para esquerda. ......................................................... 15 
Figura 14: Passo 2 da rotação para esquerda. ......................................................... 15 
Figura 15: Passo 3 da rotação para esquerda. ......................................................... 16 
Figura 16: Passo 4 da rotação para esquerda. ......................................................... 16 
Figura 17: Antes e depois da rotação para esquerda. ............................................... 17 
Figura 18: Inserção em AVL e FB. ............................................................................ 17 
Figura 19: Primeira parte da rotação dupla Direita-Esquerda - Rotação à esquerda.
 .................................................................................................................................. 18 
Figura 20: Segunda parte da rotação dupla Direita-Esquerda - Rotação à direita .... 18 
Figura 21: Passo 1 da rotação Direita-Esquerda. ...................................................... 18 
Figura 22: Passo 2 da rotação Direita-Esquerda. ...................................................... 19 
Figura 23: Passo 3 da rotação Direita-Esquerda. ...................................................... 19 
Figura 24: Passo 4 da rotação Direita-Esquerda. ...................................................... 19 
Figura 25: Passo 5 da rotação Direita-Esquerda. ...................................................... 20 
Figura 26: Passo 6 da rotação Direita-Esquerda. ...................................................... 20 
Figura 27: Antes e depois da rotação dupla Direita-Esquerda. ................................. 21 
Figura 28: Inserção em AVL e FB. ............................................................................ 21 
Figura 29: Primeira parte da rotação dupla Esquerda-Direita - Rotação à direita. .... 22 
4 
 
Figura 30: Segunda parte da rotação dupla Esquerda-Direita - Rotação à esquerda.
 .................................................................................................................................. 22 
Figura 31: Passo 1 da rotação Esquerda-Direita. ...................................................... 22 
Figura 32: Passo 2 da rotação Esquerda-Direita. ...................................................... 23 
Figura 33: Passo 3 da rotação Esquerda-Direita. ...................................................... 23 
Figura 34: Passo 4 da rotação Esquerda-Direita. ...................................................... 23 
Figura 35: Passo 5 da rotação Esquerda-Direita. ...................................................... 24 
Figura 36: Passo 6 da rotação Esquerda-Direita....................................................... 24 
Figura 37: Antes e depois da rotação dupla Esquerda-Direita. ................................. 25 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5 
 
INTRODUÇÃO 
 
 Eficiência é algo que todos procuram em algoritmos, porém não é algo fácil de 
obter. Às vezes, um código eficiente para busca pode ter um tempo muito alto na 
hora de remover um item. A árvore binária de busca (ABB) é eficiente na busca, mas 
conforme dados vão sendo inseridos e/ou removidos, seu sistema de busca acaba 
não sendo tão eficiente quanto em uma árvore binária considerada equilibrada. 
 Uma árvore equilibrada tem o tamanho do lado esquerdo e lado direito, a 
partir de sua raiz, muito parecidos. Para que a ABB fique equilibrada, é necessário 
um balanceamento estático: criar uma nova árvore e inserir os dados da árvore 
desequilibrada e então apaga-la. Todo esse processo custa muito tempo. 
 A árvore de Adelson-Velsky e Landis (AVL) propõe uma mudança às árvores 
estáticas. Elas são árvores dinâmicas, ou seja, o seu balanceamento (a busca por 
seu equilibrio) é feito dentro da árvore após a inserção ou remoção de dados. 
 
 
 
 
 
 
 
 
 
 
 
6 
 
1. O QUE É UMA ÁRVORE AVL 
 
Os matemáticos soviéticos Georgy Adelson-Velsky e Evgenii Landis 
publicaram em “Algoritmos para organização de informação”, em 1962, a proposta 
de uma árvore que fosse balanceada dinamicamente. 
Essa árvore, conforme dados fossem inseridos e removidos, iria se balancear 
automaticamente. Com isso, a árvore sempre teria uma complexidade baixa. 
O fator principal da AVL é o balanceamento, que traz equilíbrio a árvore. Se 
ela está maior para um lado do que para o outro, dependendo de seu tipo, pode não 
estar em equilíbrio. O balanceamento é feito por rotações, que podem ser simples 
ou duplas, para a direita ou para a esquerda. 
A complexidade da árvore AVL, em notação O, é: 
 Média Pior Caso 
Espaço n n 
Busca Log n Log n 
Inserção Log n Log n 
Remoção Log n Log n 
Tabela 1: Complexidade da AVL em notação O. 
 
 
 
 
 
 
 
 
 
7 
 
2. FATOR DE BALANCEAMENTO 
 
O fator de balanceamento é o que o computador utiliza para verificar o nível de 
equilíbrio da árvore AVL. Enquanto para nós é algo visual, a máquina apenas 
processa dados, logo o fator de balanceamento se torna necessário. 
Para ser considerada uma árvore AVL equilibrada, o fator de balanceamento tem 
que ser 1, 0 ou -1. Ao inserir um dado, ele se torna uma folha, cujo fator de 
balanceamento é sempre 0. 
Para calcular o fator de balanceamento, é necessário saber a altura da sub-
árvore esquerda (sae) e da sub-árvore direita (sad). O fator pode ser calculado de 
duas maneiras: 
 FB = h(sad)-h(sae) 
 
Figura 1: Árvore AVL com lado esquerdo maior. 
 
 FB = h(sae)-h(sad) 
 
 
 
 
 
0 
-1 
+1 
0 
Figura 2: Árvore AVL com lado direito maior. 
8 
 
Uma árvore AVL desequilibrada, ou desbalanceada, irá ter o fator de 
balanceamento menor que -1 ou maior que 1, como nos exemplos abaixo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0 
+2 
+2 
-1 
0 
-2 
-4 
-2 
0 
-1 
0 
Figura 3: Árvores AVL desbalanceadas. 
9 
 
3. ESTRUTURA DE DADOS 
 
A estrutura de uma arvore AVL é bem semelhante a estrutura de uma arvore 
binária de busca. As diferenças ficam por conta das informações que contribuirão 
para que a arvore passe por balenceamento. Assim, um nó de uma AVL pode ser: 
typedef struct no { 
int chave; 
int fb; 
struct no *Pai; //Opcional 
struct no *FilhoEsquerdo; 
struct no*FilhoDireito; 
} no; 
 
Onde fb representa a variável que armazena o valor do fator de 
balanceamento do nó. 
Outra forma de implementar esta estrutura é: 
typedef struct arvore{ 
int info; 
struct arvore *dir, *esq; 
int altura; //Altura máxima entre a altura das sub-árvores esquerda e 
direita 
}AVL; 
 
10 
 
A altura da maior das sub-árvores é declarada na estrutura, de forma que o 
fator de balanceamento é calculado a partir dessas informações e não precisa ser 
constantemente atualizado dentro da própria estrutura. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11 
 
4. ROTAÇÕES 
 
Rotações são as operações que permitem o rebalanceamento das árvores 
AVL. As rotações alteram a posição dos nós envolvidos em seu processo. Existem 
quatro tipos de rotação: 
 Rotação simples à direita 
 Rotação simples à esquerda 
 Rotação dupla à esquerda ou rotação direita-esquerda 
 Rotação dupla à direita ou rotação esquerda-direita 
 
4.1. Rotação simples para a direita 
 
4.1.1. Como funciona 
 
 Abaixo se percebe uma situação em que uma árvore balanceada recebe um 
novo nó. Ocorre desbalanceamento para o nó C cujo fator de balanceamento passa 
de -1 para -2, sendo necessário uma rotação. 
 Sabe-se que a rotação deve ser para a direita, pois o ramo mais pesado da 
árvore é o esquerdo como indica o sinal negativo do FB de C. 
 
 
Figura 4: Inserção em AVL e FB após a inserção. 
 
Insere a 
a 
c 
b 
FB(a)=0 
FB(b)=-1 
FB(c)=-2 
c 
b 
12 
 
Balanceando: 
 
Figura 5: Rotação simples para direita na AVL. 
 
 A rotação torna B o pai de A e C e balanceia a árvore. 
4.1.2. Passo a passo 
 
 
 
Endereços de B e C são guardados em 
variáveis auxiliares. Note que os filhos esquerdos de 
B e C apontam para NULO. 
 
 
 
 
O filho esquerdo de C passa a receber o filho 
direito de B. 
 
 
c a 
b 
a 
c 
b Rotaciona 
FB(a)=0 
FB(c)=0 
FB(b)=0 
a 
c 
b 
AuxC 
AuxB 
a 
c 
b 
AuxC 
AuxB 
Figura 6: Passo 1 da rotação 
para direita. 
Figura 7: Passo 2 da rotação para 
direita. 
13 
 
 
 
 
O filho direito de B passa a ser C. 
 
 
 
 
 
 
O AuxC que indica início da árvore 
aponta para B. 
B agora é raiz. 
 
 
 
Em linhas gerais, a partir do exemplo tem-se o pseudocódigo: 
 Ap = P; //Pai é guardado em variável que indica raiz da árvore 
 Af = Ap->FilhoEsquerdo; //(F) Filho Esquerdo é guardado em variável auxiliar 
 Ap->FilhoEsquerdo = Af->FilhoDireito; 
 Af->FilhoDireito = Ap; //Pai torna-se filho 
 Ap = Af; //Filho torna-se raiz da árvore 
 
a 
c 
b 
AuxC 
AuxB 
a c 
b 
AuxC 
AuxB 
Figura 8: Passo 3 da rotação para 
direita. 
Figura 9: Passo 4 da rotação para direita. 
14 
 
 
Figura 10: Antes e depois da rotação para direita. 
 
 
4.2. Rotação simples para a esquerda 
 
4.2.1. Como funciona 
 
 Assim como no exemplo para Rotação simples, na imagem abaixo ocorre o 
desbalanceamento da árvore após a inserção de um elemento. 
 Neste caso a rotação deve ser para a esquerda, pois o ramo mais pesado da 
árvore é o direito como indica o sinal positivo do FB de A. 
 
 
Figura 11: Inserção em AVL e FB. 
 
Balanceando: 
P 
F 
 
P 
F 
 
 
a 
b 
Insere c 
c 
a 
b 
FB(c)=0 
FB(b)=+1 
FB(a)=+2 
15 
 
 
Figura 12: Rotação simples para esquerda na AVL. 
 
 A árvore fica balanceada com a rotação. 
 
4.2.2. Passo a passo 
 
 
O primeiro passo é o mesmo do da rotação para 
a direita: endereços de B e C são guardados em 
variáveis auxiliares. 
 
 
 
 
 
 
 
O filho direito de A passa a receber o filho 
esquerdo de B.c a 
b 
c 
a 
b Rotaciona 
FB(a)=0 
FB(c)=0 
FB(b)=0 
c 
a 
b 
AuxB 
AuxA 
c 
a b 
AuxB AuxA 
Figura 13: Passo 1 da rotação para 
esquerda. 
Figura 14: Passo 2 da rotação 
para esquerda. 
16 
 
 
 
O filho esquerdo de B passa a ser A. 
 
 
 
 
 
 
 
O AuxA que indica início da árvore aponta 
para B. 
B agora é raiz. 
 
 
 
 
 
O pseudocódigo para rotação à esquerda é então: 
 Ap = P; 
 Af = Ap->FilhoDireito; //(F) 
 Ap->FilhoDireito= Af->FilhoEsquerdo; 
 Af->FilhoEsquerdo = Ap; 
 Ap = Af; 
c 
a b 
AuxB AuxA 
 
c a 
b 
AuxB AuxA 
Figura 15: Passo 3 da rotação para 
esquerda. 
Figura 16: Passo 4 da rotação para 
esquerda. 
17 
 
 
Figura 17: Antes e depois da rotação para esquerda. 
 
4.3. Rotação dupla direita-esquerda 
 
4.3.1. Como funciona 
 
 A inserção de B desbalanceia a árvore tornando o ramo esquerdo mais 
pesado. 
 Desta vez, a rotação da sub-árvore(filho) deve ser à esquerda. Abaixo, pode-
se ver que em relação a A, o ramo direito pesa mais. A rotação seguinte, aplicada à 
árvore (pai), deve ser à direita. 
 
 
Figura 18: Inserção em AVL e FB. 
 
O primeiro passo do balanceamento é a rotação à esquerda da sub-árvore: 
 
P 
F 
 
P 
F 
 
 
Insere b 
FB(b)=0 
FB(a)=+1 
FB(c)=-2 
c 
a 
b 
c 
a 
18 
 
 
Figura 19: Primeira parte da rotação dupla Direita-Esquerda - Rotação à esquerda. 
Tem-se então uma árvore como a vista em rotação para a direita: 
 
Figura 20: Segunda parte da rotação dupla Direita-Esquerda - Rotação à direita 
A árvore está então balanceada com B por raiz. 
 
4.3.2. Passo a passo 
 
 
 
Variáveis guardam os endereços de C 
(pai), A (filho) e B (neto). 
 
 
 
 
FB(c)=0 
FB(b)=-1 
FB(a)=-2 
b 
a 
a 
b 
Resultando 
Rotação para 
a esquerda 
a 
c 
b 
c a 
b 
Rotação 
para a 
direita 
FB(a)=0 
FB(c)=0 
FB(b)=0 
a 
c 
b 
b 
c 
a 
AuxC 
AuxA 
AuxB 
Figura 21: Passo 1 da rotação Direita-
Esquerda. 
19 
 
 
 
Filho direito de A aponta para filho 
esquerdo de B. 
 
 
 
 
 
 
 
 
Filho direito de B aponta para A. 
 
 
 
 
 
 
Filho direito de C aponta para 
filho esquerdo de B. 
 
 
 
b 
c 
a 
AuxC 
AuxA 
AuxB 
b 
c 
a 
AuxC 
AuxA 
AuxB 
 
b 
c 
a 
AuxC 
AuxA AuxB 
 
Figura 22: Passo 2 da rotação Direita-
Esquerda. 
Figura 23: Passo 3 da rotação Direita-
Esquerda. 
Figura 24: Passo 4 da rotação Direita-Esquerda. 
20 
 
 
 
 
Filho esquerdo de B passa a 
ser C. 
 
 
 
 
 
 
O AuxA que indica início da árvore 
aponta para B. 
B agora é raiz. 
 
 
 
Pseudocódigo: 
 Ap = P; 
 Af = Ap->FilhoEsquerdo; //(F) 
 An = Af->FilhoDireito; //(N) 
 Af->FilhoDireito = An->FilhoEsquerdo; 
 An->FilhoEsquerdo = Af; 
 Ap->FilhoEsquerdo = An->FilhoDireito; 
 An->FilhoDireito = Ap; 
 Ap = An; 
b 
c 
a 
AuxC 
AuxA 
AuxB 
b 
c a 
AuxC 
AuxA 
AuxB 
Figura 25: Passo 5 da rotação Direita-Esquerda. 
Figura 26: Passo 6 da rotação Direita-
Esquerda. 
21 
 
 
Figura 27: Antes e depois da rotação dupla Direita-Esquerda. 
 
4.4. Rotação dupla esquerda-direita 
 
4.3.1. Como funciona 
 
 A inserção de B desbalanceia a árvore tornando o ramo direito mais pesado. 
 Repare que o fator de balanceamento da árvore tem sinal oposto ao da sub-
árvore (filho), isto indica rotação dupla. 
 A rotação dupla trata-se de duas rotações seguidas de sentido oposto. A 
primeira rotação aplicada à sub-árvore e a segunda à árvore. 
 A rotação da sub-árvore(filho) deve ser à direita. No exemplo a seguir, pode-
se ver que em relação a C, o ramo esquerdo pesa mais. 
 A rotação seguinte, aplicada à árvore, deve ser à esquerda. 
 
Figura 28: Inserção em AVL e FB. 
 O primeiro passo do balanceamento é a rotação à direita da sub-árvore: 
N 
P 
F 
 
 
 
N 
P F 
 
a 
c 
Insere b 
b 
a 
c 
FB(b)=0 
FB(c)=-1 
FB(a)=+2 
22 
 
 
Figura 29: Primeira parte da rotação dupla Esquerda-Direita - Rotação à direita. 
 
Tem-se então uma árvore como a vista em rotação para à esquerda: 
 
Figura 30: Segunda parte da rotação dupla Esquerda-Direita - Rotação à esquerda. 
 
A árvore está então balanceada com B por raiz. 
 
4.3.2. Passo a passo 
 
 
 
Variáveis guardam os endereços de A 
(pai), C (filho) e B (neto). 
 
FB(c)=0 
FB(b)=+1 
FB(a)=+2 
c 
b 
b 
c 
Resultando 
c 
a 
b Rotação para 
a direita 
c a 
b 
c 
a 
b 
Rotação 
para 
esquerda 
FB(a)=0 
FB(c)=0 
FB(b)=0 
b 
a 
c 
AuxC AuxA 
AuxB 
Figura 31: Passo 1 da rotação Esquerda-
Direita. 
23 
 
 
 
Filho esquerdo de C aponta para filho 
direito de B. 
 
 
 
 
 
 
Filho direito de B aponta para C. 
 
 
 
 
 
 
 
Filho direito de A aponta para filho 
esquerdo de B. 
 
 
 
b 
a 
c 
AuxC AuxA 
AuxB 
b 
a 
c 
AuxC AuxA 
AuxB 
 
b 
a 
c 
AuxC 
AuxA 
AuxB 
 
Figura 32: Passo 2 da rotação 
Esquerda-Direita. 
Figura 33: Passo 3 da rotação Esquerda-
Direita. 
Figura 34: Passo 4 da rotação Esquerda-
Direita. 
24 
 
 
 
Filho esquerdo de B passa a ser A. 
 
 
 
 
 
 
O AuxA que indica início da árvore 
aponta para B. 
B agora é raiz. 
 
 
 
Pseudocódigo: 
 Ap = P; 
 Af = Ap->FilhoDireito; (F) 
 An = Af->FilhoEsquerdo; (N) 
 Af->FilhoEsquerdo = An->FilhoDireito; 
 An->FilhoDireito = Af; 
 Ap->FilhoDireito = An->FilhoEsquerdo; 
b 
a c 
AuxC 
AuxA 
AuxB 
b 
a c 
AuxC 
AuxA 
AuxB 
Figura 35: Passo 5 da rotação Esquerda-
Direita. 
Figura 36: Passo 6 da rotação Esquerda-
Direita. 
25 
 
 An->FilhoEsquerdo = Ap; 
 Ap = An; 
 
 
 
Figura 37: Antes e depois da rotação dupla Esquerda-Direita. 
 
 
 
 
 
 
 
 
 
 
 
 
 
N 
P 
F 
 
 
 
N 
P F 
 
26 
 
5. BUSCA EM UMA ÁRVORE AVL 
 
A Busca em uma AVL ocorre tal qual em uma Árvore Binária de Busca. A 
razão disto é que a busca não dependerá da Altura da árvore. Uma árvore binária de 
busca T é uma árvore de decisão, onde a pergunta feita ao nó v é se a chave k é 
menor, igual ou maior que a chave armazenada v. O pseudocódigo ficaria como: 
Algoritmo BuscaArvore (k,v): 
Entrada: Uma chave de busca k e um nó v de uma arvore binária de busca T. 
Saída: Um nó w da subarvore T(v) da raiz T em v, tal que w é um nó interno 
que armazena k ou w é um nó externo encontrado na travessia InOrder de T(v) 
depois de todos os nós internos com chaves menores que k e antes de todos os nós 
internos com chaves maiores que k. 
IF v é um nó externo então 
 Retorne v 
IF k = chave (v) então 
 Retorne v 
Senão, se k<chave(v) então 
 Retorne BuscaArvore (k,T.FilhoEsquerdo (v)) 
Senão 
 // ocorre {k > chave (v)} 
 Retorne BuscaArvore (k, T.FilhoDireito (v)) 
 
 
 
27 
 
6. INSERÇÃO EM UMA ÁRVORE AVL 
 
Inserção em uma árvore AVL deve ser dada pela inserção do nodo seguida 
de uma verificação na propriedade do fator de balanceamento. Caso não obedeça a 
essa propriedade, deve-se fazer uma rotação conveniente. 
Suponha que uma árvore T é AVL e que um novo nó X seja inserido em T 
causando um desbalanceamentona árvore. A fim de mantermos a árvore T como 
AVL, precisamos de um rebalanceamento dos nós. Este rebalanceamento é 
realizado através de rotações no primeiro ancestral de X cujo fator de 
balanceamento torna-se ±2. Seja A o primeiro ancestral de X cujo fator de 
balanceamento torna-se ±2 após a inclusão de um novo elemento. 
 Rotação (LL): O novo nó X é inserido na sub-árvore da esquerda do filho 
esquerdo de A; 
 Rotação (LR): X é inserido na sub-árvore da direita do filho esquerdo de A; 
 Rotação (RR): X é inserido na sub-árvore da direita do filho direito de A; 
 Rotação (RL): X é inserido na sub-árvore da esquerda do filho direito de A. 
 
Para inserir um nó X em uma árvore AVL, basta os seguintes passos: 
1. Inserir X na árvore AVL usando o mesmo algoritmo de inserção de um nó em 
uma árvore de busca binária. Recursivamente, empilhar cada nó que é 
visitado a partir do nó raiz até X, exceto o próprio X; 
2. Verificar se a pilha está vazia: 
 Se sim, o algoritmo termina. 
 Senão, seguir para o passo (3). 
3. Desempilhar um nó e verificar se a diferença de altura entre a sub-árvore da 
esquerda e da direita desse nó é maior que 1. 
 Se sim, voltar para o passo (2). 
28 
 
 Senão, será necessário rotacionar os nós. Depois de realizada a rotação, 
o algoritmo termina. 
 
Nota-se que a operação de inclusão pode ser realizada em tempo O(lg(n)). 
Após as rotações, a árvore possui a mesma altura que antes da inclusão do novo 
elemento, logo os fatores de balanceamento dos elementos que não estão 
envolvidos nas rotações não mudam. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29 
 
7. REMOÇÃO EM UMA ÁRVORE AVL 
 
A remoção deve ser dada por uma rotação em torno do nó a ser removido, a 
fim de torná-lo folha para que então possa ser removido. Em alguns casos, após a 
remoção são necessárias rotações para ajustar o fator de balanceamento. 
Para remover um nó s de uma árvore AVL, basta seguir os seguintes passos: 
1. Remover X da árvore AVL usando o mesmo algoritmo de remoção de um nó 
em uma árvore de busca binária. Recursivamente, empilhar cada nó que é 
visitado a partir do nó raiz até o nó X, incluindo-o; 
2. Verificar se a pilha está vazia 
 Se sim, o algoritmo termina. 
 Senão, seguir para o passo (3). 
3. Desempilhar um nó e verificar se a diferença de altura entre a sub-árvore da 
esquerda e da direita desse nó é maior que 1. 
 Se sim, será necessário rotacionar os nós. Dependendo do tipo de rotação 
realizada, o algoritmo pode não terminar aqui. Se ele não terminar, voltar 
para o passo (2). 
 Senão, vá para o passo (2). 
 
Nota-se que a operação de remoção pode ser realizada em tempo O(lg(n)). 
Na remoção de um elemento em uma árvore AVL, pode haver a necessidade de 
realizar mais de duas rotações (o que não acontece na inserção), podendo se 
estender para uma rotação em cada nível (O(log(n))) no pior caso. 
 
 
 
30 
 
8. IMPRESSÃO EM UMA ÁRVORE AVL 
 
 Tal qual a busca, na árvore AVL o método para impressão dos dados é o 
mesmo de uma Árvore Binária de Busca. 
 
8.1. Imprimir todas as chaves 
 
Algoritmo Imprime(*R): 
Entrada: referência de uma árvore AVL R. 
Saída: Trata-se um procedimento. Serão impressos todos os nós em Pré-
Ordem, ou seja, primeiro a raiz e depois as subárvores. Outra forma de expressar a 
ordem de processamento dos nós pode ser: r-e-d (raiz, subárvore esquerda, 
subárvores direita). 
IF R é diferente de NULL então 
 Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo 
 Imprime (R.FilhoEsquerdo) //imprime chaves da subárvore esquerda 
 Imprime (R.FilhoDireito) // imprime chaves da subárvore direita 
 
8.2. Imprimir em ordem crescente 
 
Algoritmo Imprime(*R): 
Entrada: referência de uma árvore AVL R. 
Saída: Trata-se um procedimento. Serão impressas primeiramente todas as 
chaves da subárvore esquerda, depois a chave da raiz, e por fim as chaves da 
subárvore direita. Este tipo de percurso dos nós de uma árvore se chama In-Ordem, 
ou seja, raiz no meio (in) das subárvores. 
31 
 
IF R é diferente de NULL então 
 Imprime (R.FilhoEsquerdo) //imprime chaves da subárvore esquerda 
Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo 
 Imprime (R.FilhoDireito) // imprime chaves da subárvore direita 
 
8.3. Imprimir em ordem decrescente 
 
Algoritmo Imprime(*R): 
Entrada: referência de uma árvore AVL R. 
Saída: Trata-se de um procedimento. Serão impressas primeiramente todas 
as chaves da subárvore direita, depois a chave da raiz e depois as chaves da 
subárvore esquerda. 
IF R é diferente de NULL então 
 Imprime (R.FilhoDireito) // imprime chaves da subárvore direita 
Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo 
Imprime (R.FilhoEsquerdo) //imprime chaves da subárvore esquerda 
 
 
 
 
 
 
 
 
32 
 
CONCLUSÃO 
 
A árvore AVL é considerada uma das mais eficientes, em questão da 
complexidade, quando comparada a outros tipos de árvores. São utilizadas em 
redes de comunicação e na codificação para compactação de arquivos. 
Nas redes de comunicação, os dados são fragmentados e enviados várias 
vezes. Pode ocorrer do pacote de dados não chegar inteiro ao destino ou de ter 
dados que já foram recebidos. Por utilizar uma árvore binária, é fácil pesquisar e ter 
acesso aos dados recebidos e inseri-los a lista. Ao utilizar uma AVL, fica garantida 
uma maior rapidez ao acesso de dados. 
A principal codificação que utiliza conceitos de árvores binárias é conhecida 
como Algoritmo de Huffman, que armazena letras e a quantidade delas. Com a 
árvore binária fica fácil diminuir a quantidade antes necessária do arquivo. 
Mas ainda assim, a árvore AVL pode acabar sendo custosa devido à 
necessidade de rotações para o balanceamento da árvore. Quando maior for a 
árvore, mais rotações serão necessárias para poder chegar ao ponto de remover um 
dado, e ainda mais rotações para equilibrá-la novamente. 
 
 
 
 
 
 
 
 
 
33 
 
REFERÊNCIAS 
 
ANDRADE, Lívia. Árvores AVL. Disponível em: 
http://www.passeidireto.com/arquivo/1012626/aula-5_arvore-avl. Acesso em 14 de 
Junho de 2014. 
BORGES, Henrique. Algoritmo de Huffman. Disponível em: 
http://www.youtube.com/watch?v=2yWfo50jZiw. Acesso em 14 de Junho de 2014. 
BUENO, Letícia. Árvores AVL. Disponível em: 
http://professor.ufabc.edu.br/~leticia.bueno/classes/aed2/materiais/avl.pdf. Acesso 
em 14 de Junho de 2014. 
COSTA, Jean. Algoritmo de Huffman. Disponível em: 
http://www.youtube.com/watch?v=MXI4LWgDucA. Acesso em 14 de Junho de 2014. 
DUTRA, Caio. Árvore Binária AVL. Disponível em: 
http://www.vivaolinux.com.br/script/Arvore-binaria-AVL. Acesso em 14 de Junho de 
2014. 
FERRARI, Roberto. Estruturas de dados – Unidade 16: Árvores Binárias de 
Busca – Parte 1. Disponível em: http://www2.dc.ufscar.br/~bsi/materiais/ed/u16.html. 
Acesso em: 24 de Junho de 2014. 
HARGROVE, John. The AVL Tree Rotations Tutorial. Disponível em: 
http://pages.cs.wisc.edu/~paton/readings/liblitVersion/AVL-Tree-Rotations.pdf. 
Acesso em 14 de Junho de 2014. 
KRUSE, Robert; RYBA, Alex. Data Structures and Program Design in C++. 
Section 10.4, Height Balance: AVL tree. Disponível em: 
http://cs.gmu.edu/~setia/cs310/slides/avl.pdf. Acesso em 18 de Junho de 2014. 
MORRIS, John. AVL trees. Disponível em: 
https://www.cs.auckland.ac.nz/software/AlgAnim/AVL.html. Acesso em 14 de Junho 
de 2014. 
34 
 
NASCIMENTO, Edson. Árvore AVL. Disponível em: 
http://colabweb.ufam.edu.br/pluginfile.php/14107/mod_resource/content/3/aed2_10_
Arvore%20AVL.pdf.Acesso em 14 de Junho de 2014. 
NONATO, Luiz. Algoritmo de Inserção. Disponível em: 
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho 
de 2014. 
NONATO, Luiz. Implementação da Remoção. Disponível em: 
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/algo-remocao.html. Acesso em: 24 de 
Junho de 2014. 
NONATO, Luiz. Inserção em uma Árvore AVL. Disponível em: 
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho 
de 2014. 
PARLANI, Nick. BInary Trees. Disponível em: 
http://cslibrary.stanford.edu/110/BinaryTrees.html. Acesso em: 24 de Julho de 2014. 
PROSSER, Patrick. AVL Trees. Disponível em: 
http://www.dcs.gla.ac.uk/~pat/52233/slides/AVLTrees1x1.pdf. Acesso em: 24 de 
Junho de 2014. 
SOUZA, Jairo. Árvore AVL. Disponível em: 
http://www.ufjf.br/jairo_souza/files/2009/12/5-Indexa%C3%A7%C3%A3o-Arvore-
AVL.pdf. Acesso em 18 de Junho de 2014. 
TOFFOLO, Túlio. Árvores AVL. Disponível em: 
http://www.decom.ufop.br/toffolo/site_media/uploads/2011-1/bcc202/slides/25._ 
arvores_%28parte_2%29.pdf. Acesso em 14 de Junho de 2014. 
WALKER, Julienne. AVL trees. Disponível em: 
http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx. Acesso em 
14 de Junho de 2014. 
WIKIPÉDIA. Árvore AVL – Inserção. Disponível em: 
http://pt.wikipedia.org/wiki/%C3%81rvore_AVL#Inser.C3.A7.C3.A3o. Acesso em: 24 
de Junho de 2014. 
35 
 
WIKIPÉDIA. Codificação de Huffman. Disponível em: 
http://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_de_Huffman. Acesso em 14 
de Junho de 2014. 
WIKIPEDIA. Evgenii Landis. Disponível em: 
http://en.wikipedia.org/wiki/Evgenii_Landis. Acesso em 14 de Junho de 2014. 
WIKIPEDIA. Georgy Adelson-Velsky. Disponível em: 
http://en.wikipedia.org/wiki/Georgy_Adelson-Velsky. Acesso em 14 de Junho de 
2014. 
Árvore AVL. Disponível em: http://www.passeidireto.com/arquivo/2536633/arvore-
avl. Acesso em 14 de Junho de 2014.

Continue navegando