Árvores Binárias
Árvores Binárias
Árvores Binárias
Árvores Binárias
Rafael C. S. Schouery
[email protected]
2º semestre/2023
Árvores Binárias
Exemplo de uma árvore binária:
̸=
3
Relação entre altura e número de nós
4
Implementação
5 7
10 8 1 6
4 9
5
Implementação com ponteiro para pai
5 7
10 8 1 6
4 9
6
Implementação em C
7
Criando uma árvore e buscando
1 p_no criar_arvore(int x, p_no esq , p_no dir) {
2 p_no r = malloc(sizeof(struct no));
3 r->dado = x;
4 r->esq = esq;
5 r->dir = dir;
6 return r;
7 }
8
Número de nós e altura
Como calcular o número de nós da árvore?
1 int numero_nos(p_no raiz) {
2 if (raiz == NULL)
3 return 0;
4 return numero_nos(raiz ->esq) + numero_nos(raiz ->dir) + 1;
5 }
v[0] 5 8 v[7]
5 8
v[1] 1 6 v[6]
7 8 8
v[2] 7 2 v[5]
7 3
v[3] 4 3 v[4]
É uma árvore binária, onde o valor do pai é o maior valor dos seus
filhos
10
Exemplo: Criando um torneio
8
7 8
5 7 3 8
5 1 7 4 3 2 6 8
v[0] v[1] v[2] v[3] v[4] v[5] v[6] v[7]
11
Exemplo: Criando um torneio
5 7 3 8
5 1 7 4 3 2 6 8
v[0] v[1] v[2] v[3] v[4] v[5] v[6] v[7]
12
Percorrendo os nós - Pré-ordem
A pré-ordem
• primeiro visita (processa) a raiz
• depois a subárvore esquerda
• depois a subárvore direita
5 7
3 8 1 6
4 9
Ex: 2, 5, 3, 8, 4, 7, 1, 9, 6
13
Percorrendo os nós - Pós-ordem
A pós-ordem
• primeiro visita a subárvore esquerda
• depois a subárvore direita
• e por último visita a raiz
5 7
3 8 1 6
4 9
Ex: 3, 4, 8, 5, 9, 1, 6, 7, 2
14
Percorrendo os nós - Inordem
A inordem
• primeiro visita a subárvore esquerda
• depois visita a raiz
• e por última visita a subárvore direita
5 7
3 8 1 6
4 9
Ex: 3, 5, 4, 8, 2, 1, 9, 7, 6
15
Percurso em profundidade e expressões
+ ˆ
7 − × 2
− 9 3 9
Notação
• Pré-fixa: / + 7 - - 3 9 ^ × 3 9 2
• Pós-fixa: 7 3 - 9 - + 3 9 × 2 ^ /
• Infixa: 7 + - 3 - 9 / 3 × 9 ^ 2
16
Implementação de percurso em profundidade
1 void pre_ordem(p_no raiz) {
2 if (raiz != NULL) {
3 printf("%d ", raiz ->dado); /* visita raiz */
4 pre_ordem(raiz ->esq);
5 pre_ordem(raiz ->dir);
6 }
7 }
18
Percorrendo os nós — em largura
O percurso em largura
• visita os nós por níveis
• da esquerda para a direita
5 7
3 8 1 6
4 9
Ex: 2, 5, 7, 3, 8, 1, 6, 4, 9
19
Implementação do percurso em largura
Como implementar o percurso em largura?
• Usamos uma fila
• Colocamos a raiz na fila e depois
• pegamos um elemento da fila e enfileiramos seus filhos
5 7
3 8 1 6
4 9
Fila
20
Percurso em largura
21
Exercício
22
Exercício
23
Exercício
24