Escolar Documentos
Profissional Documentos
Cultura Documentos
Árvores
Aula 15
Árvores
Uma árvore é uma estrutura de dados que se caracteriza por
uma relação de hierarquia entre os elementos que a compõe.
Ex: - Organograma de uma empresa.
- Divisão de um livro em capítulos, seções, tópicos.
- Estruturas de diretórios.
Presidente
Diretor Diretor
Comercial Administrativo
A
t1 t3
t2
B D
C
E F G
3
Árvores
Terminologia
Raiz
A
Nível 0
Grau 1
B C Grau 2 D
Nível 1
E F G H Grau 3
Nível 2
I J K
Nível 3
Grau 0 5
Árvores binárias
São árvores em que todos os nodos tem grau menor ou igual a dois.
A Raiz Subárvore
Subárvore direita
esquerda
B D
E F H
G
J K
6
Percursos em árvores binárias
● Pré-ordem
● Em-ordem
● Pós-ordem
● Em-nível
7
Percurso em pré-ordem
inicio
se árvore não é vazia então
Visitar o nodo raiz
Percorrer a subárvore esquerda
Percorrer a subárvore direita
fim_se
fim
Exemplo
1o. A
B C
2o. 3o.
A B C 8
Percurso em pré-ordem
B C
D E F
G H
? ? ?
9
Percurso em pré-ordem
B C
D E F
G H
ABDEGCFH
10
Percurso em-ordem
inicio
se árvore não é vazia então
Percorrer a subárvore esquerda
Visitar o nodo raiz
Percorrer a subárvore direita
fim_se
fim
Exemplo
2o. A
B C
1o. 3o.
B A C 11
Percurso em-ordem
B C
D E F
G H
? ? ?
12
Percurso em-ordem
B C
D E F
G H
DBGEACHF
13
Percurso em pós-ordem
inicio
se árvore não é vazia então
Percorrer a subárvore esquerda
Percorrer a subárvore direita
Visitar o nodo raiz
fim_se
fim
Exemplo
3o. A
B C
1o. 2o.
B C A 14
Percurso em pós-ordem
B C
D E F
G H
? ? ?
15
Percurso em pós-ordem
B C
D E F
G H
DGEBHFCA
16
Percurso em nível
inicio
Inserir o nodo raiz em uma fila
Enquanto a fila não estiver vazia
Retirar o nodo T da fila
Visitar T
Adicionar os filhos de T na fila
fim_Enquanto
fim Exemplo
B C
D E
A B C D E 17
Percurso em nível
inicio
Inserir o nodo raiz em uma fila
Enquanto a fila não estiver vazia
Retirar o nodo T da fila
Visitar T
Adicionar os filhos de T na fila
fim_Enquanto
fim Exemplo
B C
D E
A B C D E 18
Percurso em nível
X D
H E F
G J
? ? ?
19
Percurso em nível
X D
H E F
G J
AXDHEFGJ
20
Árvores - Implementação
Representação por encadeamento:
raiz
1200
1300
1000
32
2200
1100
NULL
15 42
NULL
NULL
NULL
35 55
NULL
21
Árvores - Implementação
Nodo para armazenar um inteiro
esq info dir
324
1530
1000
1200
struct nodo {
Dado info;
Nodo *esq;
Nodo *dir;
};
typedef struct {
Nodo *raiz;
} Arvore;
23
Árvore de busca binária
Os dados são distribuídos pelos nodos de forma a facilitar a
pesquisa de um determinado elemento.
30
20 40
10 25 50
22 42 60
25
Árvore de busca binária - inserção
início
se a árvore está vazia então
inserir o nodo
senão
se o dado do nodo que será inserido é menor
que o dado armazenado no nodo raiz então
inserir o nodo na subárvore esquerda
senão
inserir o nodo na subárvore direita
fim_se
fim_se
fim
26
Árvore de busca binária
Inserir os nodos: 30 20 25 10 40 em uma árvore vazia.
30
30
30 20
20
25
30 30
20 20 40
10 25 10 25 27
Árvore de busca binária - procura
início
se a árvore está vazia então
nodo não encontrado
senão
se a raiz armazena o elemento procurado então
nodo encontrado
senão
se o valor procurado for menor que o valor
armazenado no nodo raiz então
procurar a partir da subárvore esquerda
senão
procurar a partir da subárvore direita
fim_se
fim_se
fim_se
fim 28
Árvore de busca binária
Procurar os nodos:
27
25 30
20 40
10 25 50
22 42 60
29
Árvore de busca binária - remoção
Existem 3 casos:
N 40
N 20 N N 45 N
30
Árvore de busca binária - remoção
N 50
70
N 60 N 80 N
N 65 N
31
Árvore de busca binária - remoção
N 50
70
N 60 N 80 N
N 65 N
32
Árvore de busca binária - remoção
N 50
65
N 60 N 80 N
N 65 N
33
Árvores de grau qualquer
Para representar árvores de grau qualquer utilizar uma árvore binária
fornecendo aos ponteiros esq e dir significados diferentes:
B C D
E F G H I J
34
Árvores de grau qualquer
A
C
E
G D
F
H
K J
35