Download - Árvore AVL
-
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)}
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.