prof. hilton cardoso marins junior [email protected] Árvores binÁrias
TRANSCRIPT
![Page 2: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/2.jpg)
Árvores Binárias
São estruturas do tipo árvore, onde o grau de cada nó é menor ou igual a 2.
Quando o grau do nó for igual a 2 temos a subárvore a direita (sad) e a subárvore a esquerda (sae), quando o grau do nó for igual a 1 temos uma subárvore direita ou uma subárvore esquerda e se o grau do nó for igual a 0 não temos subárvores.
Aplicação:
Representação de expressões aritméticas de tal forma que a hierarquia dos operadores fique clara.
Em operações de ordenação.
![Page 3: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/3.jpg)
Exemplo de Árvore Binária
A expressão (a * b) + (c / (d + e)) poderia ser representada da seguinte forma:
+
:*
ba +c
ed
![Page 4: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/4.jpg)
Definição
Uma árvore binária T é um conjunto finito de elementos denominados nós ou vértices, tal que:
T = Ø e a árvore é dita vazia, ou
Existe um nó especial r, chamado raiz de T, e os restantes podem ser divididos em dois subconjuntos disjuntos, Tr
L e Tr
R a subárvore esquerda e a direita de r,respectivamente, as quais são também
árvores binárias.
![Page 5: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/5.jpg)
Tipos de Árvores Binárias Árvore estritamente binária:
Cada nó possui 0 ou 2 filhos.
Árvore binária completa:Se v é um nó tal que alguma subárvore de v é
vazia, então v se localiza ou no último (maior) ou no penúltimo nível da árvore.
Árvore binária cheia:Se v é um nó tal que alguma subárvore de v é
vazia, então v se localiza no último (maior) nível da árvore. v é um nó folha.
![Page 6: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/6.jpg)
Árvore Binária
Em uma árvore binária cheia o número de nós do nível i é igual a 2i.
Consequentemente, em qualquer árvore binária existe no máximo 2i nós no nível i.
20 = 1
21 = 2
22 = 4
23 = 8
![Page 7: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/7.jpg)
Representação de uma Árvore Binária por Contiguidade
O nó será uma estrutura com um campo de informação e duas referências, uma para a sae (subárvore esquerda) e outra para a sad (subárvore direita).
A Raiz localiza-se na primeira célula (índice 0)
-1 indica filho nuloÍndice Informação sae sad
0 13 4 2
1 31 6 -1
2 25 7 1
3 12 -1 -1
4 10 5 3
5 2 -1 -1
6 29 -1 -1
7 20 -1 -1
13
10 25
3112 202
29
![Page 8: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/8.jpg)
Representação de uma Árvore Binária por Encadeamento
O nó é formado por uma estrutura composta de:
Campo de informaçãoPonteiro para sae.
Ponteiro para sad.sae info sad
A
sae info sad
B null
sae info sad
C
sae info sad
null D
sae info sad
E
sae info sad
null F null
sae info sad
null H null
sae info sad
null I null
sae info sad
null G null
![Page 9: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/9.jpg)
Operações com Árvore Binária por Encadeamento
Para exemplificarmos operações com uma árvore binária por encadeamento utilizaremos a definição abaixo:
struct TipoArvore { int info; struct TipoArvore* sae; struct TipoArvore* sad;};
typedef struct TipoArvore Arvore;
Trata-se de uma árvore binária encadeada de números inteiros, todos os exemplos podem ser adaptados para qualquer outro tipo de dado básico ou estruturado.
![Page 10: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/10.jpg)
Operações com Árvore Binária por Encadeamento
//cria uma árvore vaziaArvore* inicializa();
//verifica se a arvore está vaziaint estaVazia(Arvore* a);
//cria um nó, dado a informação e as duas subárvoresArvore* criaNo(int n, Arvore* sae, Arvore* sad);
//libera a estrutura da árvoreArvore* libera(Arvore* a);
//Determinar se uma informação se encontra ou não na árvoreint busca(Arvore* a, int n);
//imprime a informação de todos os nós da árvorevoid imprime(Arvore* a);
//Determinar a altura de uma árvoreint getAltura(Arvore* a);
//Contar quantas são as folhas de uma árvoreint getfolhas(Arvore* a);
![Page 11: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/11.jpg)
O programa principalint main(){ Arvore *D = criaNo(4, inicializa(), inicializa()); Arvore *E = criaNo(5, inicializa(), inicializa()); Arvore *F = criaNo(6, inicializa(), inicializa()); Arvore *G = criaNo(7, inicializa(), inicializa()); Arvore *B = criaNo(2, D, E); Arvore *C = criaNo(3, F, G); Arvore *A = criaNo(1, B, C);
imprime(A);
printf("\nAltura da arvore = %d", getAltura(A));
if (!busca(A, 113)){ printf("\nInformacao INEXISTENTE!"); }else{ printf("\nInformacao ENCONTRADA COM SUCESSO!"); }
printf("\nQuantidade de folhas = %d", getFolhas(A));
A = libera(A); imprime(A); return 0;}
1, 2, 4, 5, 3, 6 e 7
2
4
Não haverá saída!
![Page 12: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/12.jpg)
Analisando a chamada da função main:
Arvore *D = criaNo(4, inicializa(), inicializa());
/* cria uma árvore vazia. */Arvore* inicializa(){ return NULL;}
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
nullnull
![Page 13: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/13.jpg)
Analisando a chamada da função main:
Arvore *D = criaNo(4, inicializa(), inicializa());
/* cria uma árvore vazia. */Arvore* inicializa(){ return NULL;}
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
nullnull
p
![Page 14: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/14.jpg)
Analisando a chamada da função main:
Arvore *D = criaNo(4, inicializa(), inicializa());
/* cria uma árvore vazia. */Arvore* inicializa(){ return NULL;}
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
nullnull
sae info sad
null 4 null
p
![Page 15: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/15.jpg)
Analisando a chamada da função main:
Arvore *D = criaNo(4, inicializa(), inicializa());
/* cria uma árvore vazia. */Arvore* inicializa(){ return NULL;}
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
nullnull
sae info sad
null 4 null
D
![Page 16: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/16.jpg)
Analisando a chamada da função main:
Arvore *E = criaNo(5, inicializa(), inicializa());
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 4 null
D
sae info sad
null 5 null
E
![Page 17: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/17.jpg)
Analisando a chamada da função main:
Arvore *F = criaNo(6, inicializa(), inicializa());
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 4 null
D
sae info sad
null 5 null
E
sae info sad
null 6 null
F
![Page 18: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/18.jpg)
Analisando a chamada da função main:
Arvore *G = criaNo(7, inicializa(), inicializa());
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 4 null
D
sae info sad
null 5 null
E
sae info sad
null 6 null
F
sae info sad
null 7 null
G
![Page 19: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/19.jpg)
Analisando a chamada da função main:
Arvore *B = criaNo(2, D, E);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 4 null
D
sae info sad
null 5 null
E
sae info sad
null 6 null
F
sae info sad
null 7 null
G
![Page 20: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/20.jpg)
Analisando a chamada da função main:
Arvore *B = criaNo(2, D, E);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 4 null
D
sae info sad
null 5 null
E
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null null
p
![Page 21: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/21.jpg)
Analisando a chamada da função main:
Arvore *B = criaNo(2, D, E);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
null 6 null
F
sae info sad
null 7 null
Gsae info sad
2
p
D E
![Page 22: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/22.jpg)
Analisando a chamada da função main:
Arvore *B = criaNo(2, D, E);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D E
![Page 23: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/23.jpg)
Analisando a chamada da função main:
Arvore *C = criaNo(3, F, G);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D E
![Page 24: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/24.jpg)
Analisando a chamada da função main:
Arvore *C = criaNo(3, F, G);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D E
sae info sad
null null
p
![Page 25: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/25.jpg)
Analisando a chamada da função main:
Arvore *C = criaNo(3, F, G);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
p
![Page 26: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/26.jpg)
Analisando a chamada da função main:
Arvore *C = criaNo(3, F, G);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
C
![Page 27: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/27.jpg)
Analisando a chamada da função main:
Arvore *A = criaNo(1, B, C);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
C
![Page 28: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/28.jpg)
Analisando a chamada da função main:
Arvore *A = criaNo(1, B, C);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
C
sae info sad
null null
p
![Page 29: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/29.jpg)
Analisando a chamada da função main:
Arvore *A = criaNo(1, B, C);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
C
sae info sad
1
p
![Page 30: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/30.jpg)
Analisando a chamada da função main:
Arvore *A = criaNo(1, B, C);
/* cria um nó com a informação, a sae e a sad. */Arvore* criaNo(int n, Arvore* sae, Arvore* sad){ Arvore* p = (Arvore*) malloc(sizeof(Arvore)); p->info = n; p->sae = sae; p->sad = sad; return p;}
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
C
sae info sad
1
A
![Page 31: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/31.jpg)
Configuração da Árvore até o momento
sae info sad
null 6 null
F
sae info sad
null 7 null
G
sae info sad
null 4 null
sae info sad
null 5 null
sae info sad
2
B
D Esae info sad
3
C
sae info sad
1
A
1
2 3
75 64
![Page 32: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/32.jpg)
Exemplo
Usando as funções inicializa() e criaNo(), crie uma estrutura que represente a seguinte árvore:
1
2 3
64 5
![Page 33: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/33.jpg)
Exemplo
Usando as funções inicializa() e criaNo(), crie uma estrutura que represente a seguinte árvore:
Arvore *D = criaNo(4, inicializa(), inicializa());Arvore *E = criaNo(5, inicializa(), inicializa());Arvore *F = criaNo(6, inicializa(), inicializa());Arvore *B = criaNo(2, inicializa(), D);Arvore *C = criaNo(3, E, F);Arvore *A = criaNo(1, B, C);
1
2 3
64 5
![Page 34: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/34.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1, 2, 4, 5, 3, 6 e 7
![Page 35: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/35.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
![Page 36: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/36.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
/* verifica se a arvore está vazia. */int estaVazia(Arvore* a){ return a == NULL;}
![Page 37: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/37.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1
![Page 38: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/38.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1
![Page 39: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/39.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1 2
![Page 40: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/40.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1 2
![Page 41: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/41.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1 2 4
![Page 42: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/42.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1 2 4
null
![Page 43: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/43.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1 2 4
null
![Page 44: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/44.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
a
1 2 4
![Page 45: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/45.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4
a
null
![Page 46: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/46.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4
a
null
![Page 47: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/47.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4
a
![Page 48: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/48.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4
a
![Page 49: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/49.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4
a
![Page 50: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/50.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4
a
![Page 51: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/51.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 52: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/52.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
null
![Page 53: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/53.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
null
![Page 54: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/54.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 55: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/55.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
null
![Page 56: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/56.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
null
![Page 57: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/57.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 58: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/58.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 59: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/59.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 60: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/60.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 61: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/61.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 62: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/62.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5
a
![Page 63: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/63.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3
a
![Page 64: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/64.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3
a
![Page 65: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/65.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
![Page 66: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/66.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
null
![Page 67: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/67.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
null
![Page 68: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/68.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
![Page 69: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/69.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
null
![Page 70: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/70.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
null
![Page 71: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/71.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
![Page 72: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/72.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
![Page 73: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/73.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
![Page 74: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/74.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6
a
![Page 75: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/75.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 76: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/76.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
null
![Page 77: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/77.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
null
![Page 78: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/78.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 79: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/79.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
null
![Page 80: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/80.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
null
![Page 81: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/81.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 82: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/82.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 83: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/83.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 84: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/84.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 85: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/85.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
![Page 86: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/86.jpg)
Analisando a chamada da função main:
imprime(A);
/* imprime a informação de todos os nós da árvore. */void imprime(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprime(a->sae); /* mostra sae */ imprime(a->sad); /* mostra sad */ }}
1
2 3
75 64
1 2 4 5 3 6 7
a
Fim! Volta para a chamada externa.
![Page 87: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/87.jpg)
Percurso em Árvores Binárias
Uma das operações básicas relativas à manipulação de árvores é a visita sistemática a cada um dos seus nós.
Para percorrer a árvore deve-se, então, visitar cada um de seus nós. Visitar um nó significa operar com a informação do nó. Por exemplo: imprimir (conforme analisado anteriormente), atualizar informações, etc.
![Page 88: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/88.jpg)
Percurso em Árvores Binárias
Temos duas categorias de percurso:
Percurso em profundidade: Corresponde a visitar um nó raiz e explora tanto quanto possível cada um dos seus
ramos, antes de retroceder.
Percurso em largura: Corresponde a visitar cada nó começando o nível mais baixo (ou mais alto) e movendo para baixo (ou para cima) nível a nível, visitando nós em cada nível da esquerda para direita (ou da direita para a esquerda).
![Page 89: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/89.jpg)
Percurso em Profundidade
Pré-ordem:
Visitar a raizPercorrer a sub-árvore esquerda em pré-
ordemPercorrer a sub-árvore direita em pré-ordem
In-ordem:
Percorrer a sub-árvore esquerda em in-ordemVisitar a raizPercorrer a sub-árvore direita em in-ordem
Pós-ordem:
Percorrer a sub-árvore esquerda em pós-ordem
Percorrer a sub-árvore direita em pós-ordem Visitar a raiz
![Page 90: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/90.jpg)
Percurso em Profundidade: Pré-Ordem
Visitar a raizPercorrer a sub-árvore esquerda em pré-
ordemPercorrer a sub-árvore direita em pré-ordem
Percurso: A B D G C E H I F
* A função Imprime analisada anteriormente usou o percurso Pré-Ordem.
A
B C
F
G
ED
IH
![Page 91: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/91.jpg)
Percurso em Profundidade: Pré-Ordem
Visitar a raizPercorrer a sub-árvore esquerda em pré-
ordemPercorrer a sub-árvore direita em pré-ordem
/* imprime todos os nós da árvore em Pre-Ordem. */void imprimePre(Arvore* a){ if(!estaVazia(a)){ printf("%d ", a->info); /* mostra raiz */ imprimePre(a->sae); /* mostra sae */ imprimePre(a->sad); /* mostra sad */ }}
![Page 92: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/92.jpg)
Percurso em Profundidade: In-Ordem
Percorrer a sub-árvore esquerda em in-ordemVisitar a raizPercorrer a sub-árvore direita em in-ordem
Percurso: D G B A H E I C F
A
B C
F
G
ED
IH
![Page 93: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/93.jpg)
Percurso em Profundidade: In-Ordem
Percorrer a sub-árvore esquerda em in-ordemVisitar a raizPercorrer a sub-árvore direita em in-ordem
/* imprime todos os nós da árvore em In-Ordem. */void imprimeIn(Arvore* a){ if(!estaVazia(a)){ imprimeIn(a->sae); /* mostra sae */ printf("%d ", a->info); /* mostra raiz */ imprimeIn(a->sad); /* mostra sad */ }}
![Page 94: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/94.jpg)
Percurso em Profundidade: Pós-Ordem
Percorrer a sub-árvore esquerda em pós-ordem
Percorrer a sub-árvore direita em pós-ordem Visitar a raiz
Percurso: G D B H I E F C A
A
B C
F
G
ED
IH
![Page 95: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/95.jpg)
Percurso em Profundidade: Pós-Ordem
Percorrer a sub-árvore esquerda em pós-ordem
Percorrer a sub-árvore direita em pós-ordem Visitar a raiz
/* imprime todos os nós da árvore em Pos-Ordem. */void imprimePos(Arvore* a){ if(!estaVazia(a)){ imprimePos(a->sae); /* mostra sae */ imprimePos(a->sad); /* mostra sad */ printf("%d ", a->info); /* mostra raiz */ }}
![Page 96: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/96.jpg)
Exercícios de Percurso em Profundidade
1. Usando as funções inicializa() e criaNo(), crie uma estrutura que represente a seguinte árvore:
2. Indique o percurso em pré-ordem, in-ordem e pós-ordem.
20
10 30
96 1814
25 338 15
![Page 97: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/97.jpg)
Exercícios de Percurso em Profundidade
Arvore *H = criaNo(6, inicializa(), inicializa());Arvore *I = criaNo(9, inicializa(), inicializa());Arvore *J = criaNo(14, inicializa(), inicializa());Arvore *K = criaNo(18, inicializa(), inicializa());Arvore *D = criaNo(8, H, I);Arvore *E = criaNo(15, J, K);Arvore *F = criaNo(25, inicializa(), inicializa());Arvore *G = criaNo(33, inicializa(), inicializa());Arvore *B = criaNo(10, D, E);Arvore *C = criaNo(30, F, G);Arvore *A = criaNo(20, B, C);
Pré-Ordem:20, 10, 8, 6, 9, 15, 14, 18, 30, 25 e 33In-Ordem: 6, 8, 9, 10, 14, 15, 18, 20, 25, 30 e 33.Pós-Ordem:6, 9, 8, 14, 18, 15, 10, 25, 33, 30 e 20.
20
10 30
96 1814
25 338 15
![Page 98: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/98.jpg)
Percurso em Largura
Lembando: Corresponde a visitar cada nó começando o nível mais baixo (ou mais alto) e movendo para baixo (ou para cima) nível a nível, visitando nós em cada nível da esquerda para direita (ou da direita para a esquerda).
Percurso: A, B, C, D, E, F, G, H e I
A
B C
F
G
ED
IH
![Page 99: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/99.jpg)
Percurso em Largura
Para exemplificar, o percurso será de cima para baixo e da esquerda para direita usando uma fila:
Quando um nó é visitado, seus filhos (se houver) são colocados no final da fila.
Nó no início da fila é visitado.
A
B C
F
G
ED
IH
![Page 100: Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ÁRVORES BINÁRIAS](https://reader035.vdocuments.site/reader035/viewer/2022062418/552fc181497959413d8f4021/html5/thumbnails/100.jpg)
Percurso em Largura
A B C
B C C D
C D D E F
Visita A – insere B e C na fila
Visita B – insere D na fila
Visita C – insere E e F na fila
E F GVisita D – insere G na filaD E F
F G H IVisita E – insere H e I na filaE F G
G H IVisita F F G H I
G H I Visita G H I
H I Visita H I
I Visita I
A
B C
F
G
ED
IH
FILA FILA