Escolar Documentos
Profissional Documentos
Cultura Documentos
Dados II
Árvores Binárias (AB)
▪ Uma árvore binária T é um conjunto finito de
elementos, tal que:
− T = ∅ e a árvore é dita vazia, ou
− Existe um nós especial r, chamado raiz de T, e os nós
restantes podem ser divididos em dois subconjuntos
disjuntos:
• TE = subárvore da esquerda
• TD = subárvore da direita
Árvores Binárias (AB)
▪ Propriedades
− O número máximo de nós no nível i de uma árvore
binária é igual a 2i
− O número máximo de nós de uma árvore binária de
altura h é igual a 2h+1-1
2 0= 1
Número máximo
de nós da árvore
22+1-1 = 23-1 = 7
2 1= 2
2 2= 4
4
5
http://www.aaanything.net/40177/pictorial/funny/new-year-and-christmas-fun/attachment/xkcd-inspired-binary-christmas-tree/
Árvores Binárias (AB)
▪ Propriedades
− Árvore binária completa é aquela que se existe um nó
t com alguma subárvore vazia, então t se localiza ou
no último ou no penúltimo nível da árvore.
Árvores Binárias (AB)
▪ Propriedades
− Árvore binária cheia é aquela em que se t é um nó
com alguma de suas subárvores vazias, então t se
localiza no último nível da árvore.
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Método sistemático para visitar cada um dos nós de
uma árvore binária.
− Baseado em três operações:
• Ir para esquerda (E)
• Imprimir o elemento (P)
• Ir para Direita (D)
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A
• Ir para direita P
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B
• Ir para direita PE
P
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D
• Ir para direita PE
PE
P
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D
• Ir para direita PE
PE
PED
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D
• Ir para direita PE
PED
PED
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D,E
• Ir para direita PE
PED
PED P
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D,E
• Ir para direita PE
PED
PED PED
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D,E
• Ir para direita PE
PED
PED PED
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D,E
• Ir para direita PED
PED
PED PED
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D,E,C
• Ir para direita PED
PED P
PED PED
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pré-Ordem (PED)
• Imprimir o elemento Percurso
• Ir para esquerda A,B,D,E,C,F
• Ir para direita PED
PED PE
PED PED
PED PED
22
Atividade Prática
E
▪ Exercício 1
− Qual o resultado
do percurso
Pré-Ordem (PED) B M
para a seguinte
árvore?
G Q
P S
23
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Em-Ordem (EPD)
• Ir para esquerda Percurso
• Imprimir o elemento D,B,E,A,F,C,G
• Ir para direita
Árvores Binárias (AB)
▪ Percurso em Árvore Binária
− Percurso em Pós-Ordem (EDP)
• Ir para esquerda Percurso
• Ir para direita D,E,B,F,G,C,A
• Imprimir o elemento
ATIVIDADE PRÁTICA
26
Atividade Prática
▪ Exercício 1
− Quais os resultados dos percursos pré-ordem,
em-ordem e pós-ordem para seguinte árvore?
27
Atividade Prática
▪ Exercício 1
− Quais os resultados dos percursos pré-ordem,
em-ordem e pós-ordem para seguinte árvore?
Pré-Ordem: A,B,D,G,C,E,H,I,F,J,K
Em-Ordem: G,D,B,A,H,E,I,C,J,F,K
Pós-Ordem: G,D,B,H,I,E,J,K,F,C,A
28
Atividade Prática
▪ Exercício 2
− Quais os resultados dos percursos pré-ordem,
em-ordem e pós-ordem para seguinte árvore?
29
Atividade Prática
▪ Exercício 3
− Quais os resultados dos percursos pré-ordem,
em-ordem e pós-ordem para seguinte árvore?
30
Atividade Prática
▪ Exercício 4
− Considere a seguinte árvore
31
Atividade Prática
▪ Exercício 4 (continuação)
1. Qual a altura da árvore?
2. Qual o resultado do percurso Pré-Ordem?
3. Ilustre graficamente como ficará a árvore após a remoção do
elemento João.
4. Qual o resultado do percurso Em-Ordem, considerando a árvore do
item anterior.
5. Ilustre graficamente como ficará a árvore após a inserção dos
elementos: Ana, Maria, Sônia, Carla, Gabriela, Alberto e Tiago.
6. Qual o resultado do percurso Pós-Ordem, considerando a árvore do
item anterior.
7. Ilustre graficamente como ficará a árvore após a remoção do
elemento Carlos, considerando a árvore
do item anterior.
8. Como pode ser classificada a árvore resultante: cheia, completa ou
incompleta? Justifique sua resposta.
32
ÁRVORES BINÁRIAS (AB)
IMPLEMENTAÇÃO
33
Implementação da Árvore Binária
▪ Estática
− Os nós são armazenados por nível no vetor.
0 1 2 3 4 5 6
A B C D E F G
Implementação da Árvore Binária
▪ Estática
− Para um vetor indexado a partir da posição 0, se um
nó está na posição i, seus filhos diretos estão nas
posições:
• 2i+1 = filha da esquerda
• 2i+2 = filho da direita
0 1 2 3 4 5 6
A B C D E F G
raiz
25
12 65
Implementação da Árvore Binária
▪ Dinâmica
− Criar a árvore inicializando o ponteiro raiz;
44
Árvore de Busca Binária (ABB)
▪ Uma árvore de busca binária (ABB) T é uma
árvore binária com as seguintes propriedades:
raiz
NULL
Operação de Inserção na ABB
O primeiro valor da sequência (25) é inserido como sendo o nó raiz da árvore.
raiz
25
49
Operação de Inserção na ABB
A inserção do próximo valor (12) inicia-se na raiz. Como 12 < 25, então
a inserção será na subárvore da esquerda.
raiz
25
12
50
Operação de Inserção na ABB
A inserção do próximo valor (60) inicia-se na raiz. Como 60 > 25, então
a inserção será na subárvore da direita.
raiz
25
12 60
51
Operação de Inserção na ABB
A inserção do valor 72 ocorre a partir da raiz. Como 72>25, então deve ser colocado na direita. Assim,
como 72 > 60 ele será adicionado na subárvore da direita.
raiz
72
25
12 60
52
Operação de Inserção na ABB
A inserção do valor 72 ocorre a partir da raiz. Como 72>25, então deve ser colocado na direita. Assim,
como 72 > 60 ele será adicionado na subárvore da direita.
raiz
25
72
12 60
53
Operação de Inserção na ABB
A inserção do valor 72 ocorre a partir da raiz. Como 72>25, então deve ser colocado na direita. Assim,
como 72 > 60 ele será adicionado na subárvore da direita.
raiz
25
12 60
72
54
Operação de Inserção na ABB
Para inserção do valor 6 é necessário realizar comparações até determinar o local correto.
raiz
6
25
12 60
72
55
Operação de Inserção na ABB
Para inserção do valor 6 é necessário realizar comparações até determinar o local correto.
raiz
25
6
12 60
72
56
Operação de Inserção na ABB
Para inserção do valor 6 é necessário realizar comparações até determinar o local correto.
raiz
25
12 60
6 72
57
Operação de Inserção na ABB
A inserção do valor 44 ocorre a partir da raiz, o valor é comparado
até a determinação da posição correta.
raiz
44
25
12 60
6 72
58
Operação de Inserção na ABB
A inserção do valor 44 ocorre a partir da raiz, o valor é comparado
até a determinação da posição correta.
raiz
25
44
12 60
6 72
59
Operação de Inserção na ABB
A inserção do valor 44 ocorre a partir da raiz, o valor é comparado
até a determinação da posição correta.
raiz
25
12 60
6 44 72
60
Operação de Inserção na ABB
Inserção do valor 53.
raiz
53
25
12 60
6 44 72
61
Operação de Inserção na ABB
Inserção do valor 53.
raiz
25
53
12 60
6 44 72
62
Operação de Inserção na ABB
Inserção do valor 53.
raiz
25
12 60
53
6 44 72
63
Operação de Inserção na ABB
Inserção do valor 53.
raiz
25
12 60
6 44 72
53
64
Operação de Inserção na ABB
Inserção do valor 19.
19 raiz
25
12 60
6 44 72
53
65
Operação de Inserção na ABB
Inserção do valor 19.
raiz
25
19
12 60
6 44 72
53
66
Operação de Inserção na ABB
Inserção do valor 19.
raiz
25
12 60
6 19 44 72
53
67
Árvore de Busca Binária (ABB)
▪ Operação de Remoção
− Para remover um elemento de uma ABB é necessário
determinar se este elemento pertence a árvore.
• Este processo pode ser realizado com a operação
de pesquisa
− A operação de remoção não é tão simples quanto a
inserção, pois em alguns caso o nó a ser removido não
é um nó folha.
− A retirada dos nós internos necessita de mais
operações, tornado o processo mais complexo.
Árvore de Busca Binária (ABB)
▪ Operação de Remoção
− Existem três casos especiais que precisam ser
considerados durante a remoção:
• Caso 1: O nó a ser removido é um nó folha
– Neste caso a remoção é simples, sendo
necessário apenas atualizar a referência do
ponteiro do nó pai para o nó a ser removido
como
12 null. 12
6 19 19
Árvore de Busca Binária (ABB)
▪ Operação de Remoção
− Existem três casos especiais que precisam ser considerados
durante a remoção:
• Caso 2: O nó a ser removido possui uma subárvore da
esquerda ou da direita.
– Neste caso o nó da subárvore (esquerda ou direita)
ocupará o lugar do nó retirado. Um filho é promovido a
pai.
12 6
6
Árvore de Busca Binária (ABB)
▪ Operação de Remoção
− Existem três casos especiais que precisam ser
considerados durante a remoção:
• Caso 3: O nó a ser removido possui duas
subárvores.
– Nesse caso não é possível que ambos os filhos
assumam o lugar o pai.
– Para remoção é realizada uma substituição
entre o menor elemento da subárvore da direita
pelo elemento a ser removido.
– Ou, a substituição é realizada entre o maior
valor da subárvore da esquerda e o elemento a
removido.
Operação de Remoção na ABB
Caso especial 3: Remoção do nó 25 que possui duas subárvores.
raiz
25
12 60
6 19 44 72
53
72
Operação de Remoção na ABB
Caso especial 3: Remoção do nó 25 que possui duas subárvores.
Opção 1: Troca pelo menor valor da subárvore da direita.
raiz
25
12 60
6 19 44 72
53
73
Operação de Remoção na ABB
Caso especial 3: Remoção do nó 25 que possui duas subárvores.
Opção 1: Troca pelo menor valor da subárvore da direita.
raiz
44
12 60
6 19 25 72
raiz
44
12 60
6 19 53 72
raiz
25
12 60
6 19 44 72
53
76
Operação de Remoção na ABB
Caso especial 3: Remoção do nó 25 que possui duas subárvores.
Opção 2: Troca pelo maior valor da subárvore da esquerda.
raiz
25
12 60
6 19 44 72
53
77
Operação de Remoção na ABB
Caso especial 3: Remoção do nó 25 que possui duas subárvores.
Opção 2: Troca pelo maior valor da subárvore da esquerda.
raiz
19
12 60
6 25 44 72
raiz
19
12 60
6 44 72
83
Atividade Prática
▪ Exercício 1
− Para uma Árvore de Busca Binária (ABB) capaz de
armazenar elementos inteiros:
a) Ilustre graficamente como ficará a árvore após a
inserção dos elementos:
15, 8, 22, 4, 18, 10, 35, 3, 1, 5, 6, 19, 34 e 36
b) Ilustre graficamente como ficará a árvore após a
remoção dos elementos:
3, 1, 5, 19, 34 e 36.
c) Qual o resultado do percurso pré-ordem (PED)?
d) Qual o resultado do percurso em-ordem (EPD)?
e) Qual o resultado do percurso pós-ordem (EDP)?
84
Atividade Prática
▪ Exercício 2
− Considere uma ABB capaz de armazenar elementos do
tipo conjunto de caracteres (string)
a) Ilustre graficamente como ficará a árvore após a inserção dos
nomes de pelos menos 10 colegas de sala;
b) Ilustre graficamente como ficará a árvore após a inserção do
seu nome;
c) Realize uma remoção de um elemento que está no nó folha;
d) Realize a remoção do elemento raiz, alterando com o menor
elemento da subárvore da direita
e) Realize a remoção do elemento raiz, alterando com o maior
elemento da subárvore da esquerda
f) Qual o resultado do percurso pré-ordem (PED)?
g) Qual o resultado do percurso em-ordem (EPD)?
h) Qual o resultado do percurso pós-ordem (EDP)?
85
APLICAÇÃO
COMPRESSÃO DE DADOS
86
Aplicação : Compressão de Dados
▪ Compressão de Dados
− Explosão de informação textual digital.
− Na internet existem bilhões de páginas disponíveis
• Cada bilhão ocupa ~10 terabytes de texto corrido.
▪ Código de Hufman
− Método bem conhecido para compactação de
informação baseado em árvores binárias
Criando uma Árvore de Hufman
Considere a mensagem: aabbca
88
Criando uma Árvore de Hufman
Considere a mensagem: aabbca
1 2 3
Criação de um nó para cada caractere e formação de uma lista
c b a ordenada pela frequência de ocorrência dos caracteres
89
Criando uma Árvore de Huffman
Considere a mensagem: aabbca
1 2 3
c b a
3 3
a
1 2
c b
90
Criando uma Árvore de Hufman
Considere a mensagem: aabbca
1 2 3
c b a
3 3
a 6
1 2
c b 3 3
a
1 2
Árvore de Hufman c b
criada! 91
Criando o Código de Hufman
6
0 1 Caractere Código
3 3 Código de Hufman
a 1
a
0 1 0: filho da esquerda b 01
1 2 1: filho da direita
c 00
c b
92
Criando o Código de Hufman
6
0 1 Caractere Código
3 3 Código de Hufman
a 1
a
0 1 0: filho da esquerda b 01
1 2 1: filho da direita
c 00
c b
93
Criando o Código de Hufman
6
0 1 Caractere Código
3 3 Código de Hufman
a 1
a
0 1 0: filho da esquerda b 01
1 2 1: filho da direita
c 00
c b
Taxa de compactação
94
ATIVIDADE PRÁTICA
95
Atividade Prática
▪ Exercício 1
− Considerando o algoritmo de compressão de Huffman
determine qual a taxa de compressão das seguintes
mensagens:
a) xyzxxyyxxzzyyxxyzy
b) “Lorem Ipsum is simply dummy text of the printing
and typesetting industry”
96
CONSIDERAÇÕES FINAIS
97
Considerações Finais
▪ As árvore binárias são estruturas de dados
utilizadas em diversas aplicações.
▪ As operações de inserção, remoção e pesquisa
são facilitadas pela organização da árvore.
▪ A implementação utiliza métodos recursivos o
que diminui a quantidade de código.
FIM
99