Você está na página 1de 36

UNIVERSIDADE FEDERAL DO AMAZONAS

FACULDADE DE TECNOLOGIA
ENGENHARIA DA COMPUTAO
ALGORITMO E ESTRUTURA DE DADOS II




RVORE AVL








Manaus AM
2014
1

AMANDA PGO DE PAULA - 21354614
JOELINE DUTRA DA SILVA - 21353194
REBECA NUNES RODRIGUES - 21350689








RVORE AVL










Manaus AM
2014
Esse trabalho foi solicitado
como forma de obteno de
nota parcial para a disciplina
Algoritmo e Estrutura de Dados
II, ministrado pelo Prof. Edson
Nascimento.


2

SUMRIO

NDICE DE ILUSTRAES ........................................................................................ 3
INTRODUO ............................................................................................................ 5
1. O QUE UMA RVORE AVL ................................................................................. 6
2. FATOR DE BALANCEAMENTO ............................................................................. 7
3. ESTRUTURA DE DADOS ....................................................................................... 9
4. ROTAES .......................................................................................................... 11
4.1. Rotao simples para a direita ........................................................................ 11
4.1.1. Como funciona .......................................................................................... 11
4.1.2. Passo a passo .......................................................................................... 12
4.2. Rotao simples para a esquerda ................................................................... 14
4.2.1. Como funciona .......................................................................................... 14
4.2.2. Passo a passo .......................................................................................... 15
4.3. Rotao dupla direita-esquerda ...................................................................... 17
4.3.1. Como funciona .......................................................................................... 17
4.3.2. Passo a passo .......................................................................................... 18
4.4. Rotao 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. INSERO EM UMA RVORE AVL .................................................................... 27
7. REMOO EM UMA RVORE AVL ..................................................................... 29
8. IMPRESSO 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
CONCLUSO ............................................................................................................ 32
REFERNCIAS ......................................................................................................... 33

3

NDICE DE ILUSTRAES

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: Insero em AVL e FB aps a insero. .................................................... 11
Figura 5: Rotao simples para direita na AVL. ........................................................ 12
Figura 6: Passo 1 da rotao para direita. ................................................................ 12
Figura 7: Passo 2 da rotao para direita. ................................................................ 12
Figura 8: Passo 3 da rotao para direita. ................................................................ 13
Figura 9: Passo 4 da rotao para direita. ................................................................ 13
Figura 10: Antes e depois da rotao para direita. .................................................... 14
Figura 11: Insero em AVL e FB. ............................................................................ 14
Figura 12: Rotao simples para esquerda na AVL. ................................................. 15
Figura 13: Passo 1 da rotao para esquerda. ......................................................... 15
Figura 14: Passo 2 da rotao para esquerda. ......................................................... 15
Figura 15: Passo 3 da rotao para esquerda. ......................................................... 16
Figura 16: Passo 4 da rotao para esquerda. ......................................................... 16
Figura 17: Antes e depois da rotao para esquerda. ............................................... 17
Figura 18: Insero em AVL e FB. ............................................................................ 17
Figura 19: Primeira parte da rotao dupla Direita-Esquerda - Rotao esquerda.
.................................................................................................................................. 18
Figura 20: Segunda parte da rotao dupla Direita-Esquerda - Rotao direita .... 18
Figura 21: Passo 1 da rotao Direita-Esquerda. ...................................................... 18
Figura 22: Passo 2 da rotao Direita-Esquerda. ...................................................... 19
Figura 23: Passo 3 da rotao Direita-Esquerda. ...................................................... 19
Figura 24: Passo 4 da rotao Direita-Esquerda. ...................................................... 19
Figura 25: Passo 5 da rotao Direita-Esquerda. ...................................................... 20
Figura 26: Passo 6 da rotao Direita-Esquerda. ...................................................... 20
Figura 27: Antes e depois da rotao dupla Direita-Esquerda. ................................. 21
Figura 28: Insero em AVL e FB. ............................................................................ 21
Figura 29: Primeira parte da rotao dupla Esquerda-Direita - Rotao direita. .... 22
4

Figura 30: Segunda parte da rotao dupla Esquerda-Direita - Rotao esquerda.
.................................................................................................................................. 22
Figura 31: Passo 1 da rotao Esquerda-Direita. ...................................................... 22
Figura 32: Passo 2 da rotao Esquerda-Direita. ...................................................... 23
Figura 33: Passo 3 da rotao Esquerda-Direita. ...................................................... 23
Figura 34: Passo 4 da rotao Esquerda-Direita. ...................................................... 23
Figura 35: Passo 5 da rotao Esquerda-Direita. ...................................................... 24
Figura 36: Passo 6 da rotao Esquerda-Direita. ...................................................... 24
Figura 37: Antes e depois da rotao dupla Esquerda-Direita. ................................. 25

















5

INTRODUO

Eficincia algo que todos procuram em algoritmos, porm no algo fcil de
obter. s vezes, um cdigo eficiente para busca pode ter um tempo muito alto na
hora de remover um item. A rvore binria de busca (ABB) eficiente na busca, mas
conforme dados vo sendo inseridos e/ou removidos, seu sistema de busca acaba
no sendo to eficiente quanto em uma rvore binria 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, necessrio
um balanceamento esttico: criar uma nova rvore e inserir os dados da rvore
desequilibrada e ento apaga-la. Todo esse processo custa muito tempo.
A rvore de Adelson-Velsky e Landis (AVL) prope uma mudana s rvores
estticas. Elas so rvores dinmicas, ou seja, o seu balanceamento (a busca por
seu equilibrio) feito dentro da rvore aps a insero ou remoo de dados.











6

1. O QUE UMA RVORE AVL

Os matemticos soviticos Georgy Adelson-Velsky e Evgenii Landis
publicaram em Algoritmos para organizao de informao, 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 equilbrio a rvore. Se
ela est maior para um lado do que para o outro, dependendo de seu tipo, pode no
estar em equilbrio. O balanceamento feito por rotaes, que podem ser simples
ou duplas, para a direita ou para a esquerda.
A complexidade da rvore AVL, em notao O, :
Mdia Pior Caso
Espao n n
Busca Log n Log n
Insero Log n Log n
Remoo Log n Log n
Tabela 1: Complexidade da AVL em notao O.









7

2. FATOR DE BALANCEAMENTO

O fator de balanceamento o que o computador utiliza para verificar o nvel de
equilbrio da rvore AVL. Enquanto para ns algo visual, a mquina apenas
processa dados, logo o fator de balanceamento se torna necessrio.
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, necessrio 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
binria de busca. As diferenas ficam por conta das informaes que contribuiro
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 varivel 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 mxima 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 informaes e no precisa ser
constantemente atualizado dentro da prpria estrutura.




















11

4. ROTAES

Rotaes so as operaes que permitem o rebalanceamento das rvores
AVL. As rotaes alteram a posio dos ns envolvidos em seu processo. Existem
quatro tipos de rotao:
Rotao simples direita
Rotao simples esquerda
Rotao dupla esquerda ou rotao direita-esquerda
Rotao dupla direita ou rotao esquerda-direita

4.1. Rotao simples para a direita

4.1.1. Como funciona

Abaixo se percebe uma situao 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 necessrio uma rotao.
Sabe-se que a rotao 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: Insero em AVL e FB aps a insero.

Insere a
a
c
b
FB(a)=0
FB(b)=-1
FB(c)=-2
c
b
12

Balanceando:

Figura 5: Rotao simples para direita na AVL.

A rotao torna B o pai de A e C e balanceia a rvore.
4.1.2. Passo a passo



Endereos de B e C so guardados em
variveis 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 rotao
para direita.
Figura 7: Passo 2 da rotao para
direita.
13





O filho direito de B passa a ser C.






O AuxC que indica incio da rvore
aponta para B.
B agora raiz.



Em linhas gerais, a partir do exemplo tem-se o pseudocdigo:
Ap = P; //Pai guardado em varivel que indica raiz da rvore
Af = Ap->FilhoEsquerdo; //(F) Filho Esquerdo guardado em varivel auxiliar
Ap->FilhoEsquerdo = Af->FilhoDireito;
Af->FilhoDireito = Ap; //Pai torna-se filho
a
c
b
AuxC
AuxB


a c
b
AuxC
AuxB


Figura 8: Passo 3 da rotao para
direita.
Figura 9: Passo 4 da rotao para direita.
14

Ap = Af; //Filho torna-se raiz da rvore


Figura 10: Antes e depois da rotao para direita.


4.2. Rotao simples para a esquerda

4.2.1. Como funciona

Assim como no exemplo para Rotao simples, na imagem abaixo ocorre o
desbalanceamento da rvore aps a insero de um elemento.
Neste caso a rotao 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: Insero em AVL e FB.

a
b
Insere c
c
a
b
FB(c)=0
FB(b)=+1
FB(a)=+2
P
F

P
F


15

Balanceando:

Figura 12: Rotao simples para esquerda na AVL.

A rvore fica balanceada com a rotao.

4.2.2. Passo a passo


O primeiro passo o mesmo do da rotao para a
direita: endereos de B e C so guardados em variveis
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 rotao para
esquerda.
Figura 14: Passo 2 da rotao
para esquerda.
16




O filho esquerdo de B passa a ser A.







O AuxA que indica incio da rvore aponta
para B.
B agora raiz.





O pseudocdigo para rotao esquerda ento:
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 rotao para
esquerda.
Figura 16: Passo 4 da rotao para
esquerda.
17


Figura 17: Antes e depois da rotao para esquerda.

4.3. Rotao dupla direita-esquerda

4.3.1. Como funciona

A insero de B desbalanceia a rvore tornando o ramo esquerdo mais
pesado.
Desta vez, a rotao da sub-rvore(filho) deve ser esquerda. Abaixo, pode-
se ver que em relao a A, o ramo direito pesa mais. A rotao seguinte, aplicada
rvore (pai), deve ser direita.


Figura 18: Insero em AVL e FB.

O primeiro passo do balanceamento a rotao esquerda da sub-rvore:

Insere b
FB(b)=0
FB(a)=+1
FB(c)=-2
c
a
b
c
a
P
F

P
F


18


Figura 19: Primeira parte da rotao dupla Direita-Esquerda - Rotao esquerda.
Tem-se ento uma rvore como a vista em rotao para a direita:

Figura 20: Segunda parte da rotao dupla Direita-Esquerda - Rotao direita
A rvore est ento balanceada com B por raiz.

4.3.2. Passo a passo



Variveis guardam os endereos de C
(pai), A (filho) e B (neto).



c a
b
Rotao
para a
direita
FB(a)=0
FB(c)=0
FB(b)=0
a
c
b

FB(c)=0
FB(b)=-1
FB(a)=-2
b
a
a
b
Resultando
Rotao para
a esquerda
a
c
b
b
c
a
AuxC
AuxA
AuxB



Figura 21: Passo 1 da rotao 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 rotao Direita-
Esquerda.
Figura 23: Passo 3 da rotao Direita-
Esquerda.
Figura 24: Passo 4 da rotao Direita-Esquerda.
20




Filho esquerdo de B passa a
ser C.






O AuxA que indica incio da rvore
aponta para B.
B agora raiz.



Pseudocdigo:
Ap = P;
Af = Ap->FilhoEsquerdo; //(F)
An = Af->FilhoDireito; //(N)
Af->FilhoDireito = An->FilhoEsquerdo;
An->FilhoEsquerdo = Af;
Ap->FilhoEsquerdo = An->FilhoDireito;
An->FilhoDireito = Ap;
b
c
a
AuxC
AuxA
AuxB


b
c a
AuxC
AuxA
AuxB

Figura 25: Passo 5 da rotao Direita-Esquerda.
Figura 26: Passo 6 da rotao Direita-
Esquerda.
21

Ap = An;

Figura 27: Antes e depois da rotao dupla Direita-Esquerda.

4.4. Rotao dupla esquerda-direita

4.3.1. Como funciona

A insero 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 rotao dupla.
A rotao dupla trata-se de duas rotaes seguidas de sentido oposto. A
primeira rotao aplicada sub-rvore e a segunda rvore.
A rotao da sub-rvore(filho) deve ser direita. No exemplo a seguir, pode-
se ver que em relao a C, o ramo esquerdo pesa mais.
A rotao seguinte, aplicada rvore, deve ser esquerda.

Figura 28: Insero em AVL e FB.
a
c
Insere b
b
a
c
FB(b)=0
FB(c)=-1
FB(a)=+2
N
P
F



N
P F

22

O primeiro passo do balanceamento a rotao direita da sub-rvore:

Figura 29: Primeira parte da rotao dupla Esquerda-Direita - Rotao direita.

Tem-se ento uma rvore como a vista em rotao para esquerda:

Figura 30: Segunda parte da rotao dupla Esquerda-Direita - Rotao esquerda.

A rvore est ento balanceada com B por raiz.

4.3.2. Passo a passo



Variveis guardam os endereos de A
(pai), C (filho) e B (neto).

c a
b
c
a
b

Rotao
para
esquerda
FB(a)=0
FB(c)=0
FB(b)=0
FB(c)=0
FB(b)=+1
FB(a)=+2
c
b
b
c
Resultando
c
a
b
Rotao para
a direita
b
a
c
AuxC AuxA



AuxB
Figura 31: Passo 1 da rotao 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 rotao
Esquerda-Direita.
Figura 33: Passo 3 da rotao Esquerda-
Direita.
Figura 34: Passo 4 da rotao Esquerda-
Direita.
24



Filho esquerdo de B passa a ser A.






O AuxA que indica incio da rvore
aponta para B.
B agora raiz.



Pseudocdigo:
Ap = P;
Af = Ap->FilhoDireito; (F)
An = Af->FilhoEsquerdo; (N)
Af->FilhoEsquerdo = An->FilhoDireito;
An->FilhoDireito = Af;
Ap->FilhoDireito = An->FilhoEsquerdo;
An->FilhoEsquerdo = Ap;
b
a
c
AuxC
AuxA

AuxB
b
a
c
AuxC
AuxA

AuxB
Figura 35: Passo 5 da rotao Esquerda-
Direita.
Figura 36: Passo 6 da rotao Esquerda-
Direita.
25

Ap = An;



Figura 37: Antes e depois da rotao 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 Binria de Busca. A
razo disto que a busca no depender da Altura da rvore. Uma rvore binria de
busca T uma rvore de deciso, onde a pergunta feita ao n v se a chave k
menor, igual ou maior que a chave armazenada v. O pseudocdigo ficaria como:
Algoritmo BuscaArvore (k,v):
Entrada: Uma chave de busca k e um n v de uma arvore binria de busca T.
Sada: 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 ns internos com chaves menores que k e antes de todos os ns
internos com chaves maiores que k.
IF v um n externo ento
Retorne v
IF k = chave (v) ento
Retorne v
Seno, se k<chave(v) ento
Retorne BuscaArvore (k,T.FilhoEsquerdo (v))
Seno
// ocorre {k > chave (v)}
Retorne BuscaArvore (k, T.FilhoDireito (v))



27

6. INSERO EM UMA RVORE AVL

Insero em uma rvore AVL deve ser dada pela insero do nodo seguida
de uma verificao na propriedade do fator de balanceamento. Caso no obedea a
essa propriedade, deve-se fazer uma rotao conveniente.
Suponha que uma rvore T AVL e que um novo n X seja inserido em T
causando um desbalanceamento na rvore. A fim de mantermos a rvore T como
AVL, precisamos de um rebalanceamento dos ns. Este rebalanceamento
realizado atravs de rotaes 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 aps a incluso de um novo elemento.
Rotao (LL): O novo n X inserido na sub-rvore da esquerda do filho
esquerdo de A;
Rotao (LR): X inserido na sub-rvore da direita do filho esquerdo de A;
Rotao (RR): X inserido na sub-rvore da direita do filho direito de A;
Rotao (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 insero de um n em
uma rvore de busca binria. Recursivamente, empilhar cada n que
visitado a partir do n raiz at X, exceto o prprio X;
2. Verificar se a pilha est vazia:
Se sim, o algoritmo termina.
Seno, seguir para o passo (3).
3. Desempilhar um n e verificar se a diferena de altura entre a sub-rvore da
esquerda e da direita desse n maior que 1.
Se sim, voltar para o passo (2).
28

Seno, ser necessrio rotacionar os ns. Depois de realizada a rotao,
o algoritmo termina.

Nota-se que a operao de incluso pode ser realizada em tempo O(lg(n)).
Aps as rotaes, a rvore possui a mesma altura que antes da incluso do novo
elemento, logo os fatores de balanceamento dos elementos que no esto
envolvidos nas rotaes no mudam.

















29

7. REMOO EM UMA RVORE AVL

A remoo deve ser dada por uma rotao em torno do n a ser removido, a
fim de torn-lo folha para que ento possa ser removido. Em alguns casos, aps a
remoo so necessrias rotaes 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 remoo de um n
em uma rvore de busca binria. 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.
Seno, seguir para o passo (3).
3. Desempilhar um n e verificar se a diferena de altura entre a sub-rvore da
esquerda e da direita desse n maior que 1.
Se sim, ser necessrio rotacionar os ns. Dependendo do tipo de rotao
realizada, o algoritmo pode no terminar aqui. Se ele no terminar, voltar
para o passo (2).
Seno, v para o passo (2).

Nota-se que a operao de remoo pode ser realizada em tempo O(lg(n)).
Na remoo de um elemento em uma rvore AVL, pode haver a necessidade de
realizar mais de duas rotaes (o que no acontece na insero), podendo se
estender para uma rotao em cada nvel (O(log(n))) no pior caso.



30

8. IMPRESSO EM UMA RVORE AVL

Tal qual a busca, na rvore AVL o mtodo para impresso dos dados o
mesmo de uma rvore Binria de Busca.

8.1. Imprimir todas as chaves

Algoritmo Imprime(*R):
Entrada: referncia de uma rvore AVL R.
Sada: Trata-se um procedimento. Sero impressos todos os ns em Pr-
Ordem, ou seja, primeiro a raiz e depois as subrvores. Outra forma de expressar a
ordem de processamento dos ns pode ser: r-e-d (raiz, subrvore esquerda,
subrvores direita).
IF R diferente de NULL ento
Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo
Imprime (R.FilhoEsquerdo) //imprime chaves da subrvore esquerda
Imprime (R.FilhoDireito) // imprime chaves da subrvore direita

8.2. Imprimir em ordem crescente

Algoritmo Imprime(*R):
Entrada: referncia de uma rvore AVL R.
Sada: Trata-se um procedimento. Sero impressas primeiramente todas as
chaves da subrvore esquerda, depois a chave da raiz, e por fim as chaves da
subrvore direita. Este tipo de percurso dos ns de uma rvore se chama In-Ordem,
ou seja, raiz no meio (in) das subrvores.
31

IF R diferente de NULL ento
Imprime (R.FilhoEsquerdo) //imprime chaves da subrvore esquerda
Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo
Imprime (R.FilhoDireito) // imprime chaves da subrvore direita

8.3. Imprimir em ordem decrescente

Algoritmo Imprime(*R):
Entrada: referncia de uma rvore AVL R.
Sada: Trata-se de um procedimento. Sero impressas primeiramente todas
as chaves da subrvore direita, depois a chave da raiz e depois as chaves da
subrvore esquerda.
IF R diferente de NULL ento
Imprime (R.FilhoDireito) // imprime chaves da subrvore direita
Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo
Imprime (R.FilhoEsquerdo) //imprime chaves da subrvore esquerda








32

CONCLUSO

A rvore AVL considerada uma das mais eficientes, em questo da
complexidade, quando comparada a outros tipos de rvores. So utilizadas em
redes de comunicao e na codificao para compactao de arquivos.
Nas redes de comunicao, os dados so fragmentados e enviados vrias
vezes. Pode ocorrer do pacote de dados no chegar inteiro ao destino ou de ter
dados que j foram recebidos. Por utilizar uma rvore binria, fcil 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 codificao que utiliza conceitos de rvores binrias conhecida
como Algoritmo de Huffman, que armazena letras e a quantidade delas. Com a
rvore binria fica fcil diminuir a quantidade antes necessria do arquivo.
Mas ainda assim, a rvore AVL pode acabar sendo custosa devido
necessidade de rotaes para o balanceamento da rvore. Quando maior for a
rvore, mais rotaes sero necessrias para poder chegar ao ponto de remover um
dado, e ainda mais rotaes para equilibr-la novamente.









33

REFERNCIAS

ANDRADE, Lvia. rvores AVL. Disponvel em:
http://www.passeidireto.com/arquivo/1012626/aula-5_arvore-avl. Acesso em 14 de
Junho de 2014.
BORGES, Henrique. Algoritmo de Huffman. Disponvel em:
http://www.youtube.com/watch?v=2yWfo50jZiw. Acesso em 14 de Junho de 2014.
BUENO, Letcia. rvores AVL. Disponvel 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. Disponvel em:
http://www.youtube.com/watch?v=MXI4LWgDucA. Acesso em 14 de Junho de 2014.
DUTRA, Caio. rvore Binria AVL. Disponvel 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 Binrias de
Busca Parte 1. Disponvel 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. Disponvel 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. Disponvel em:
http://cs.gmu.edu/~setia/cs310/slides/avl.pdf. Acesso em 18 de Junho de 2014.
MORRIS, John. AVL trees. Disponvel em:
https://www.cs.auckland.ac.nz/software/AlgAnim/AVL.html. Acesso em 14 de Junho
de 2014.
34

NASCIMENTO, Edson. rvore AVL. Disponvel 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 Insero. Disponvel em:
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho
de 2014.
NONATO, Luiz. Implementao da Remoo. Disponvel em:
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/algo-remocao.html. Acesso em: 24 de
Junho de 2014.
NONATO, Luiz. Insero em uma rvore AVL. Disponvel em:
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho
de 2014.
PARLANI, Nick. BInary Trees. Disponvel em:
http://cslibrary.stanford.edu/110/BinaryTrees.html. Acesso em: 24 de Julho de 2014.
PROSSER, Patrick. AVL Trees. Disponvel em:
http://www.dcs.gla.ac.uk/~pat/52233/slides/AVLTrees1x1.pdf. Acesso em: 24 de
Junho de 2014.
SOUZA, Jairo. rvore AVL. Disponvel 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, Tlio. rvores AVL. Disponvel 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. Disponvel em:
http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx. Acesso em
14 de Junho de 2014.
WIKIPDIA. rvore AVL Insero. Disponvel em:
http://pt.wikipedia.org/wiki/%C3%81rvore_AVL#Inser.C3.A7.C3.A3o. Acesso em: 24
de Junho de 2014.
35

WIKIPDIA. Codificao de Huffman. Disponvel em:
http://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_de_Huffman. Acesso em 14
de Junho de 2014.
WIKIPEDIA. Evgenii Landis. Disponvel em:
http://en.wikipedia.org/wiki/Evgenii_Landis. Acesso em 14 de Junho de 2014.
WIKIPEDIA. Georgy Adelson-Velsky. Disponvel em:
http://en.wikipedia.org/wiki/Georgy_Adelson-Velsky. Acesso em 14 de Junho de
2014.
rvore AVL. Disponvel em: http://www.passeidireto.com/arquivo/2536633/arvore-
avl. Acesso em 14 de Junho de 2014.

Você também pode gostar