-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy patharvore.c
130 lines (106 loc) · 3.55 KB
/
arvore.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* www.GeeksBR.com */
/* Implementação de árvore binária */
#include <stdio.h>
#include <stdlib.h>
#include "quarto.c"
/* Cada nó armazena três informações:
nesse caso um número (num),
ponteiro para subárvore à direita (sad)
e ponteiro para subárvore à esquerda (sae).*/
typedef struct tree
{
Tipopaciente *pontpaciente;
struct tree* sad;
struct tree* sae;
} Tree;
/* A estrutura da árvore é representada por um ponteiro
para o nó raiz. Com esse ponteiro, temos acesso aos
demais nós. */
/* Função que cria uma árvore */
Tree* createTree()
{
/* Uma árvore é representada pelo endereço do nó raiz,
essa função cria uma árvore com nenhum elemento,
ou seja, cria uma árvore vazia, por isso retorna NULL. */
return NULL;
}
/* Função que verifica se uma árvore é vazia */
int treeIsEmpty(Tree* t)
{
/* Retorna 1 se a árvore for vazia e 0 caso contrário */
return t == NULL;
}
/* Função que mostra a informação da árvore */
void showTree(Tree* t)
{
/* Essa função imprime os elementos de forma recursiva */
printf("<"); /* notação para organizar na hora de mostrar os elementos */
if(!treeIsEmpty(t)) /* se a árvore não for vazia... */
{
printf("%s ", &t->pontpaciente.codigo); /* mostra a raiz */
showTree(t->sae); /* mostra a sae (subárvore à esquerda) */
showTree(t->sad); /* mostra a sad (subárvore à direita) */
}
printf(">"); /* notação para organizar na hora de mostrar os elementos */
}
/* Função que insere um dado na árvore */
void insertTree(Tree* t, Tipopaciente* ppac)
{
/* Essa função insere os elementos de forma recursiva */
if(*t == NULL)
{
t = (Tree*)malloc(sizeof(Tree)); /* Aloca memória para a estrutura */
t->sae = NULL; /* Subárvore à esquerda é NULL */
t->sad = NULL; /* Subárvore à direita é NULL */
t->Paciente = Pac; /* Armazena a informação */
} else {
int num;
char cod [10];
cod = Pac->codigo;
if(Pac->codigo < (*t)->pontpaciente.codigo) /* Se o número for menor então vai pra esquerda */
{
/* Percorre pela subárvore à esquerda */
insertTree(&(*t)->sae, Pac);
}
if(var1 > (*t)->var2) /* Se o número for maior então vai pra direita */
{
/* Percorre pela subárvore à direita */
insertTree(&(*t)->sad, Pac);
}
}
}
/* Função que verifica se um elemento pertence ou não à árvore */
int isInTree(Tree* t, int num) {
if(treeIsEmpty(t)) { /* Se a árvore estiver vazia, então retorna 0 */
return 0;
}
/* O operador lógico || interrompe a busca quando o elemento for encontrado */
return t->num==num || isInTree(t->sae, num) || isInTree(t->sad, num);
}
int main()
{
Tree* t = createTree(); /* cria uma árvore */
insertTree(&t, 12); /* insere o elemento 12 na árvore */
insertTree(&t, 15); /* insere o elemento 15 na árvore */
insertTree(&t, 10); /* insere o elemento 10 na árvore */
insertTree(&t, 13); /* insere o elemento 13 na árvore */
showTree(t); /* Mostra os elementos da árvore em pré-ordem */
if(treeIsEmpty(t)) /* Verifica se a árvore está vazia */
{
printf("\n\nArvore vazia!!\n");
} else {
printf("\n\nArvore NAO vazia!!\n");
}
if(isInTree(t, 15)) { /* Verifica se o número 15 pertence a árvore */
printf("\nO numero 15 pertence a arvore!\n");
} else {
printf("\nO numero 15 NAO pertence a arvore!\n");
}
if(isInTree(t, 22)) { /* Verifica se o número 22 pertence a árvore */
printf("\nO numero 22 pertence a arvore!\n\n");
} else {
printf("\nO numero 22 NAO pertence a arvore!\n\n");
}
free(t); /* Libera a memória alocada pela estrutura árvore */
return 0;
}