-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1195.c
109 lines (90 loc) · 1.75 KB
/
1195.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//1195 - Árvore Binária de Busca
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
struct regNo { struct regNo *esq;
int valor;
struct regNo *dir;
};
typedef struct regNo TArvore;
int tipo;
TArvore * AchaPai(TArvore *r, int v)
{ if(r == NULL)
/* Arvore vazia */
return NULL;
else
if(v <= r->valor)
/* Novo noh deve ficar a esquerda de r */
if(r->esq == NULL)
return r;
else
return AchaPai(r->esq, v);
else
/* Novo noh deve ficar a direita de r */
if(r->dir == NULL)
return r;
else
return AchaPai(r->dir, v);
}
int ImprimeArvore(TArvore *r)
{
if(r != NULL)
{
if(tipo == 1){
printf(" %d", r->valor);
ImprimeArvore(r->esq);
ImprimeArvore(r->dir);
}
if(tipo == 2){
ImprimeArvore(r->esq);
printf(" %d", r->valor);
ImprimeArvore(r->dir);
}
if(tipo == 3){
ImprimeArvore(r->esq);
ImprimeArvore(r->dir);
printf(" %d", r->valor);
}
}
return 0;
}
int main()
{ TArvore *raiz, *pai, *aux;
int Tam, Ncasos, c, d, noh;
raiz = NULL;
scanf("%d", &Ncasos);
for(c=1; c<=Ncasos; c++)
{
raiz = NULL;
scanf("%d", &Tam);
for(d=0; d<Tam; d++)
{
scanf("%d", &noh);
aux = (TArvore *) malloc(sizeof(TArvore));
aux->valor = noh;
aux->esq = NULL;
aux->dir = NULL;
pai = AchaPai(raiz, noh);
if(pai == NULL)
raiz = aux;
else
if(noh <= pai->valor)
pai->esq = aux;
else
pai->dir = aux;
}
printf("Case %d:", c);
printf("\nPre.:");
tipo = 1;
ImprimeArvore(raiz);
printf("\nIn..:");
tipo = 2;
ImprimeArvore(raiz);
printf("\nPost:");
tipo = 3;
ImprimeArvore(raiz);
printf("\n\n");
}
return 0;
}