Você está na página 1de 99

Estrutura de

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


Á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 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,F,G
• Ir para direita PED

PED PED

PED PED PED PED


ATIVIDADE PRÁTICA

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

pai fesq fdir


Implementação da Árvore Binária
▪ Estática
− Vantagem
• Espaço utilizado somente para armazenar o
conteúdo dos nós;
• As ligações são determinadas implicitamente;
− Desvantagem
• A árvore pode conter muitos espaços vagos caso
não seja completa;
• O processo de remoção de nós também produz
espaços vagos na árvore;
Implementação da Árvore Binária
▪ Dinâmica
− Utiliza ponteiros para realizar o encadeamento dos
nós da árvore;
− Cada nó da árvore possui um campo que armazena o
valor, além de dois ponteiros que apontam para as
subárvores da esquerda e direita.
valor

ponteiro para ponteiro para


subárvore da subárvore da
esquerda direita
25
Implementação da Árvore Binária
▪ Dinâmica

raiz

25

12 65
Implementação da Árvore Binária
▪ Dinâmica
− Criar a árvore inicializando o ponteiro raiz;

− Criar o nó raiz da árvore e armazena um valor.


Implementação da Árvore Binária
▪ Dinâmica
− Inserção de um novo elemento
Implementação da Árvore Binária
▪ Dinâmica
− Percursos: Pré-Ordem, Em-Ordem e Pós-Ordem
Implementação da Árvore Binária
▪ Dinâmica
− Método recursivo para destruir a árvore binária,
removendo todos os elementos e liberando o espaço
alocado.
Implementação da Árvore Binária
▪ Dinâmica
− Método recursivo para calcular a altura de uma
árvore binária.
ÁRVORES DE BUSCA BINÁRIA (ABB)

44
Árvore de Busca Binária (ABB)
▪ Uma árvore de busca binária (ABB) T é uma
árvore binária com as seguintes propriedades:

− Seja v um nó da árvore de busca binária T;


− Se vi pertence a subárvore da esquerda de v,
então vi < v;
− Se vi pertence a subárvore da direita de v,
então vi > v;
Árvore de Busca Binária (ABB)
▪ Assim,
− Os nós da subárvore da esquerda são sempre menores que a
raiz da subárvore;
− Os nós da subárvore da direita são sempre maiores que a raiz
da subárvore;
Árvore de Busca Binária (ABB)
▪ Um percurso em-ordem em uma ABB resulta na
apresentação dos valores em ordem crescente;
▪ AS inversão das propriedades permite exibir os
valores em ordem decrescente
• Subárvore da esquerda: vi > v
– Armazenar valores maiores que a raiz
• Subárvore da direita: vi < v
– Armazenar valores menores que a raiz
Árvore de Busca Binária (ABB)
▪ Operação de Inserção
− Considere a inserção dos seguintes elementos
25,12,60,72,6,44,53 e 19
− O estado inicial da árvore é vazia, assim:

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

Remover o nó 25 como uma operação do Caso


Especial 2: Nó com um único filho. 53
Promover o nó 53 para um nó pai. 74
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 53 72

Remover o nó 25 como uma operação do Caso


Especial 2: Nó com um único filho.
Promover o nó 53 para um nó pai. 75
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
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

Remover o nó 25 como uma operação do Caso


Especial 1: Nó folha.
Atualizar o nó pai como null
53
78
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 44 72

Remover o nó 25 como uma operação do Caso


Especial 1: Nó folha.
Atualizar o nó pai como null
53
79
Operações
▪ Implementação da Remoção
Operações
▪ Pesquisa
− Iniciar a busca do elemento a partir da
raiz da árvore.
− Para cada nó-raiz de uma subárvore compare:
• Se o valor procurado é menor que o valor do
nó-raiz, então, procure na subárvore da esquerda;
• Se o valor procurado é maior que o valor do
nó-raiz, então, procure na subárvore da direita;
− Caso o elemento seja encontrado, retorne verdadeiro,
ou falso caso contrário.
Operações
▪ Implementação da Pesquisa
ATIVIDADE PRÁTICA

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

Remova da lista os dois nós menos frequentes,


formando um novo nó cuja frequência é a soma das
frequências dos nós retirados.

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

A mensagem “aabbca” será codificada em “110101001”

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

A mensagem “aabbca” será codificada em “110101001”

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

Você também pode gostar