mc-202 — unidade 8 Árvore bináriaslehilton/mc202ef/unidade08.pdflehilton pedrosa (ic/unicamp)...

62
MC-202 — Unidade 8 Árvore Binárias Lehilton Pedrosa Instituto de Computação – Unicamp Segundo Semestre de 2016 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Upload: others

Post on 22-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

MC-202 — Unidade 8Árvore Binárias

Lehilton Pedrosa

Instituto de Computação – Unicamp

Segundo Semestre de 2016

. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .

Page 2: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Roteiro

1 Introdução

2 Árvore binária

3 Percursos em árvore

4 Outras representações

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 2 / 22

Page 3: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Introdução

ProblemaVocê e um(a) amigo(a) estão jogando. Ele pensa em um animal de umcerto conjunto e você tem que adivinhar que animal é. Você só pode fazerperguntas com respostas sim ou não!

Pergunta: Como fazer o menor número de perguntas?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 3 / 22

Page 4: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Introdução

ProblemaVocê e um(a) amigo(a) estão jogando. Ele pensa em um animal de umcerto conjunto e você tem que adivinhar que animal é. Você só pode fazerperguntas com respostas sim ou não!

Pergunta: Como fazer o menor número de perguntas?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 3 / 22

Page 5: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 6: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 7: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 8: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Mamífero?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 9: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Mamífero?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

sim

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 10: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Mamífero?

Grande?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

sim

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 11: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Mamífero?

Grande?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

sim

não

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 12: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Mamífero?

Tentáculo?

4 patas?

Grande?Voa? Grande?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

sim

não

não

não

não nãonão simsim sim sim

não

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 13: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Adivinhando

Nada?

Mamífero?

Tentáculo?

4 patas?

Grande?Voa? Grande?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

sim

não

não

não

não nãonão simsim sim sim

não

Criamos uma árvore de decisão!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 4 / 22

Page 14: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Árvore binária

DefiniçãoUma árvore binária é um conjunto de nós T tal que ou T é vazio, ou

T contém um elemento especial r , denominado raizT \ {r} é a união de duas subárvores disjuntas, Te e Td ,denominadas filho esquerdo e filho direito.

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 5 / 22

Page 15: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Exemplo com definição

Nada?

Mamífero?

Tentáculo?

4 patas?

Grande?Voa? Grande?

Pássaro Macaco Elefante Cachorro Golfinho Baleia Peixe Polvo

sim

sim

não

não

não

não nãonão simsim sim sim

não

r

TdTe

Cada parte!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 6 / 22

Page 16: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Uma árvore com números

2

5 7

10 8 61

94

3

Exemplo mais simples.

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 7 / 22

Page 17: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Comparando com atenção

2

5 7

10 8 61

94

3

=

2

5 7

10 8 61

94

3

Filhos de 4:esquerdo: vaziodireito: 3

Filhos de 4:esquerdo: 3direito: vazio

Ordem dos filhos é relevante!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 8 / 22

Page 18: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Comparando com atenção

2

5 7

10 8 61

94

3

=

2

5 7

10 8 61

94

3

Filhos de 4:esquerdo: vaziodireito: 3

Filhos de 4:esquerdo: 3direito: vazio

Ordem dos filhos é relevante!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 8 / 22

Page 19: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Comparando com atenção

2

5 7

10 8 61

94

3

=

2

5 7

10 8 61

94

3

Filhos de 4:esquerdo: vaziodireito: 3

Filhos de 4:esquerdo: 3direito: vazio

Ordem dos filhos é relevante!

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 8 / 22

Page 20: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Nomenclatura e convenções2

5 7

10 8 61

94

3

Nível 1

Nível 2

Nível 3

Nível 4

Nível 5

Raiz: 2Filho esquerdo de 8: 4

Filho direito de 8: (vazio)Folhas: 10, 6, 9, 3 (só tem filhos vazios)

Nós interno: 2, 5, 7, 8, 1, 4 (tem filhos não vazios)Descendentes de 7: 1, 6, 9

Ancestrais de 4: 8, 5, 2Altura: 5 (número de níveis)

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 9 / 22

Page 21: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Algumas propriedades

Propriedades1 Se a altura é h, então a árvore:

▶ tem no mínimo h nós▶ tem no máximo 2h − 1 nós

2 Se a árvore tem n ≥ 1 nós, então:▶ a altura é no máximo n▶ a altura é no mínimo ⌈log2(n + 1)⌉▶ existem exatamente n + 1 subárvores vazias▶ existem exatamente n − 1 árvores não vazias

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 10 / 22

Page 22: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação

1

9

2

5 7

68

4

10

3

E se quisermos saber o pai de um nó?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 11 / 22

Page 23: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação

1

9

2

5 7

68

4

10

3

E se quisermos saber o pai de um nó?Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 11 / 22

Page 24: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação com ponteiro para o pai

2

5 7

8 1

9

6

4

10

3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 12 / 22

Page 25: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Uma implementação em C

arvbin.htypedef struct NoArv {

int dado;struct NoArv *esq, *dir;

} NoArv;

NoArv *arv_vazia();NoArv *criar_arv(NoArv *esq, NoArv *dir, int x);NoArv *procurar_no(NoArv *arv, int x);void imprimir(NoArv *arv);

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22

Page 26: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 27: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz):

2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 28: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6

▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 29: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último):

10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 30: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2

▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 62 Em largura: percorre níveis em ordem

▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 31: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio):

10, 5, 4, 3, 8, 2, 1, 9, 7, 62 Em largura: percorre níveis em ordem

▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 32: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 33: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita:

2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 34: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percorrendo os nós2

5 7

10 8 61

94

3

Percursos1 Em profundidade: percorre subárvores recursivamente

▶ Pré-ordem (visita primeiro a raiz): 2, 5, 10, 8, 4, 3, 7, 1, 9, 6▶ Pós-ordem (visita a raiz por último): 10, 3, 4, 8, 5, 9, 1, 6, 7, 2▶ Inordem (visita a raiz no meio): 10, 5, 4, 3, 8, 2, 1, 9, 7, 6

2 Em largura: percorre níveis em ordem▶ da esquerda para direita: 2, 5, 7, 10, 8, 1, 6, 4, 9, 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 14 / 22

Page 35: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Busca em profundidade e expressões

/

+ ^

10 - 2x

9-

3

9 3

OrdemPré-fixa: / + 10 - - 3 9 ^ × 3 9 2Pós-fixa: 10 3 - 9 - + 3 9 × 2 ^ /Infixa: 10 + - 3 - 9 / 3 × 9 ^ 2

Existem ambiguidades?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 15 / 22

Page 36: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Busca em profundidade e expressões

/

+ ^

10 - 2x

9-

3

9 3

OrdemPré-fixa: / + 10 - - 3 9 ^ × 3 9 2Pós-fixa: 10 3 - 9 - + 3 9 × 2 ^ /Infixa: 10 + - 3 - 9 / 3 × 9 ^ 2

Existem ambiguidades?Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 15 / 22

Page 37: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação de busca em profundidadevoid pre_ordem(NoArv *arv) {

if (arv) {printf("%d ", arv->dado); // visita raizpre_ordem(arv->esq);pre_ordem(arv->dir);

}}void pos_ordem(NoArv *arv) {

if (arv) {pos_ordem(arv->esq);pos_ordem(arv->dir);printf("%d ", arv->dado); // visita raiz

}}void inordem(NoArv *arv) {

if (arv) {inordem(arv->esq);printf("%d ", arv->dado); // visita raizinordem(arv->dir);

}}

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 16 / 22

Page 38: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em profundidade com pilhaComo implementar sem usar recursão?

Pré-ordemvoid pre_ordem(NoArv *arv) {

NoPilha *p;iniciar_pilha(&p);

empilhar(&p, arv);while(!pilha_vazia(p)) {

desempilhar(&p, &arv);if (arv) {

empilhar(&p, arv->dir);empilhar(&p, arv->esq);visita(arv);

}}destruir_pilha(&p);

}

Por que empilhamos arv->dir primeiro? Se fosse o contrário?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 17 / 22

Page 39: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em profundidade com pilhaComo implementar sem usar recursão?

Pré-ordemvoid pre_ordem(NoArv *arv) {

NoPilha *p;iniciar_pilha(&p);

empilhar(&p, arv);while(!pilha_vazia(p)) {

desempilhar(&p, &arv);if (arv) {

empilhar(&p, arv->dir);empilhar(&p, arv->esq);visita(arv);

}}destruir_pilha(&p);

}

Por que empilhamos arv->dir primeiro? Se fosse o contrário?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 17 / 22

Page 40: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em profundidade com pilhaComo implementar sem usar recursão?

Pré-ordemvoid pre_ordem(NoArv *arv) {

NoPilha *p;iniciar_pilha(&p);

empilhar(&p, arv);while(!pilha_vazia(p)) {

desempilhar(&p, &arv);if (arv) {

empilhar(&p, arv->dir);empilhar(&p, arv->esq);visita(arv);

}}destruir_pilha(&p);

}

Por que empilhamos arv->dir primeiro?

Se fosse o contrário?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 17 / 22

Page 41: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em profundidade com pilhaComo implementar sem usar recursão?

Pré-ordemvoid pre_ordem(NoArv *arv) {

NoPilha *p;iniciar_pilha(&p);

empilhar(&p, arv);while(!pilha_vazia(p)) {

desempilhar(&p, &arv);if (arv) {

empilhar(&p, arv->dir);empilhar(&p, arv->esq);visita(arv);

}}destruir_pilha(&p);

}

Por que empilhamos arv->dir primeiro? Se fosse o contrário?Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 17 / 22

Page 42: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 43: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura? Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 44: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 45: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 7

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 46: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 8107

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 47: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 48: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 49: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6 4

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 50: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6 4 9

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 51: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6 4 9

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 52: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6 4 9 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 53: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6 4 9 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 54: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Implementação da busca em larguraComo implementar a busca em largura?

Usamos uma fila!

Nível 5

Nível 1

Nível 2

Nível 3

Nível 4

2

5 7

10 8 61

94

3

2 5 18107 6 4 9 3

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 18 / 22

Page 55: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em largura

Percurso em larguravoid largura(NoArv *arv) {

NoFila *f;iniciar_fila(&f);

enfileirar(&f, arv);while(!fila_vazia(f)) {

desenfileirar(&p, &arv);if (arv) {

enfileirar(&f, arv->esq);enfileirar(&f, arv->dir);visita(arv);

}}destruir_fila(&f);

}

Agora enfileiramos arv->esq primeiro! Se fosse o contrário?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 19 / 22

Page 56: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em largura

Percurso em larguravoid largura(NoArv *arv) {

NoFila *f;iniciar_fila(&f);

enfileirar(&f, arv);while(!fila_vazia(f)) {

desenfileirar(&p, &arv);if (arv) {

enfileirar(&f, arv->esq);enfileirar(&f, arv->dir);visita(arv);

}}destruir_fila(&f);

}

Agora enfileiramos arv->esq primeiro!

Se fosse o contrário?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 19 / 22

Page 57: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Percurso em largura

Percurso em larguravoid largura(NoArv *arv) {

NoFila *f;iniciar_fila(&f);

enfileirar(&f, arv);while(!fila_vazia(f)) {

desenfileirar(&p, &arv);if (arv) {

enfileirar(&f, arv->esq);enfileirar(&f, arv->dir);visita(arv);

}}destruir_fila(&f);

}

Agora enfileiramos arv->esq primeiro! Se fosse o contrário?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 19 / 22

Page 58: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Outras representações de árvore binária

ProblemaTemos uma árvore e queremos guardar aestrutura em um arquivo de texto para posteriorprocessamento. Como armazenar essa árvore?

a

b c

d fe

g

Representações externas1 Indicadores de subárvores com percurso em profundidade:

a 1 1, b 0 1, d 1 0, g 0 0, c 1 1, e 0 0, f 0 02 Notação com parênteses:

▶ pré-ordem: (a(b()(d(g()())()))(c(e()())(f()())))▶ inordem: (()b((()g())d()))a((()e())c(()f()))

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 20 / 22

Page 59: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Outras representações de árvore binária

ProblemaTemos uma árvore e queremos guardar aestrutura em um arquivo de texto para posteriorprocessamento. Como armazenar essa árvore?

a

b c

d fe

g

Representações externas1 Indicadores de subárvores com percurso em profundidade:

a 1 1, b 0 1, d 1 0, g 0 0, c 1 1, e 0 0, f 0 0

2 Notação com parênteses:▶ pré-ordem: (a(b()(d(g()())()))(c(e()())(f()())))▶ inordem: (()b((()g())d()))a((()e())c(()f()))

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 20 / 22

Page 60: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Outras representações de árvore binária

ProblemaTemos uma árvore e queremos guardar aestrutura em um arquivo de texto para posteriorprocessamento. Como armazenar essa árvore?

a

b c

d fe

g

Representações externas1 Indicadores de subárvores com percurso em profundidade:

a 1 1, b 0 1, d 1 0, g 0 0, c 1 1, e 0 0, f 0 02 Notação com parênteses:

▶ pré-ordem: (a(b()(d(g()())()))(c(e()())(f()())))▶ inordem: (()b((()g())d()))a((()e())c(()f()))

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 20 / 22

Page 61: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Exercício 1

Joãozinho quer implementar uma estrutura de dados para representar otriângulo de Pascal até certa altura. Após assistir à aula de árvoresbinárias, ele decidiu que essa era a estrutura ideal e fez o seguinte desenho:

1

1 1

21 1

31 3 1

41 6 4 1

1 A estrutura que Joãozinho criou éuma árvore binária? Por quê? Senão, sugira uma estrutura maisadequada.

2 Qual o resultado será impresso seas funções para busca emprofundidade (pré-ordem, inordeme pós-ordem) e em largura foremchamadas com essa estrutura(comece com uma altura menor)?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 21 / 22

Page 62: MC-202 — Unidade 8 Árvore Bináriaslehilton/mc202ef/unidade08.pdfLehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 13 / 22..... Percorrendo os nós Percursos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Exercício 2 - Recuperando uma árvore

1 Escreva uma função para recuperar uma árvore na memória a partir de umastring com a notação em parênteses em pré-ordem.

2 Você obteve um arquivo em que foram impressos os nós de uma árvorebinária no percurso pré-ordem e gostaria de obter a árvore original.Infelizmente não é possível reconstruir essa árvore unicamente. Dê umexemplo que justifique essa afirmação.

3 E se você também tivesse um arquivo com os dados impressos com percursoinordem, você conseguiria obter a árvore original? Que combinações depercursos você precisa?

Lehilton Pedrosa (IC/Unicamp) MC-202 — Unidade 8 Segundo Semestre de 2016 22 / 22