Escolar Documentos
Profissional Documentos
Cultura Documentos
● árvore genealógica
● diagrama hierárquico de uma organização
● modelagem de algoritmos
! O conceito de árvores está diretamente ligado
à recursão
3
Árvores
B C D
E F G H I
Terminologia e Propriedades
6
! nó raiz
● existe exatamente um caminho entre a raiz e cada
um dos nós da árvore
" se existir mais de um caminho ou nenhum: grafo
Terminologia e Propriedades
8
A grau de um vértice
! é o número de
subárvores não vazias
BB C D
de um nó
! no exemplo
E F G H I ● grau de A = 3
● grau de C = 2
Terminologia e Propriedades
9
A A
B C D D C B
E F G H I I H G F E
Árvores
11
K
Terminologia
13
! Floresta
● um conjunto de árvores
● se removemos a raiz e os arcos que a ligam às sub-
árvores, ficamos com uma floresta
Árvore Binária
14
B C
D E F
G H I
Árvores Binárias
16
b
Árvores Binárias
21
! Definição de Árvores
● uma árvore é um único nó ou um nó raiz
conectado a um conjunto de árvores
● 2 folhas: 3 nós
! Nível:
● A raiz tem nível 0
B C
D E F G
H I J K L M N O
Árvore Binária Completa
28
D E F G
H I
Árvore Binária
29
typedef struct {
A
int info;
tipo_no * esq;
C
tipo_no * dir;
} tipo_no; B
Estrutura de dados do nó da AB
31
typedef struct { A
int info;
tipo_no * esq;
C
tipo_no * dir;
tipo_no * pai;
B
} tipo_no;
Representando Árvores Binárias
A B
B
Representando Árvores Binárias
a*b+d - e *(f+g)
* *
a b + e
f g
Representando Florestas
34
A
B C
B C
A
Representando Florestas
typedef struct {
char info; A
tipo_no * filho;
tipo_no * irmão;
} tipo_no
B C
D E
36
37
Representando Florestas
typedef struct { A
char info;
tipo_no * filho;
tipo_no * irmão;
} tipo_no C
B
D E
39
Representando Florestas
typedef struct { A
char info;
tipo_no * filho;
tipo_no * irmão;
} tipo_no C
B
D E
14
4 18
3 9 15 20
7 17
5
Aplicações com Árvores Binárias
! outra aplicação comum é atravessar a árvore binária,
visitando cada nó
● como sistematicamente visitaremos cada nó?
! Métodos
● pré-ordem:visite a raiz, então visite a subárvore da
esquerda, depois a subárvore da direita
pre_ordem (pt)
{
if (pt == NULL) return ();
visite(pt);
pre_ordem (pt->esq);
}
Atravessando Árvores Binárias
a*b – (f + g) * e
-
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*a
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*a
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*a
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*ab
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*ab
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*ab
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
-*ab*
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f g
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f g
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f g
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f g e
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f g e
* *
a b + e
f g
Atravessando Árvores Binárias
a*b – (f + g) * e
- pré-ordem:
- * a b *+f g e
* *
a b + e
f g
em-ordem
em_ordem (pt)
{
if (pt == NULL) return ();
em_ordem (pt->esq);
visite(pt);
em_ordem (pt-> dir);
}
Atravessando Árvores Binárias
a*b – (f + g) * e
- em-ordem:
- a*b - f+g * e
* *
a b + e
f g
Pós-ordem
pos_ordem (pt)
{
if (pt == NULL) return ();
pos_ordem (pt->esq);
}
Atravessando Árvores Binárias
a*b – (f + g) * e
- pós-ordem:
ab*fg+e*-
* *
a b + e
f g