SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <locale.h>
4
5 struct No
6 {
7 int numero;
8 struct No *esquerda;
9 struct No *direita;
10 };
11 typedef struct No No;
12
13 int n, tam;
14
15 int altura(No *pRaiz);
16 int maior(int a, int b);
17 int contarFolhas(No *pRaiz);
18 int contarNos(No *pRaiz);
19 void exibirPosOrdem(No *pRaiz);
20 void exibirPreOrdem(No *pRaiz);
21 void exibirEmOrdem(No *pRaiz);
22 void remover(No **pRaiz, int numero);
23 No *MenorEsquerda(No **no);
24 No *MaiorDireita(No **no);
25 void inserir(No **pRaiz, int numero);
26 void criarArvore(No **pRaiz);
27 int isInTree(No* pRaiz, int num);
28 No* libera(No* pRaiz);
29
30 int main()
31 {
32 tam=0;
33 setlocale(LC_ALL, "Portuguese");
34 No *ARVORE = (No *) malloc(sizeof(No));
35 if(!ARVORE)
36 {
37 printf("nSem memória disponível!n");
38 exit(1);
39 }
40 else
41 {
42 criarArvore(ARVORE);
43 int opt;
44
45 do
46 {
47 system("cls");
48 opt=menu();
49 opcao(ARVORE,opt);
50 getchar();
51 }
52 while(opt);
53 free(ARVORE);
54 return 0;
55 }
56 }
57
58 int menu(void)
59 {
60 int opt;
61
62 printf("nn============================================================n");
63 printf(" Escolha a opcaon");
64 printf(" 0. Sair n");
65 printf(" 1. Zerar Árvore n");
66 printf(" 2. Imprimir Arvore em Ordem n");
67 printf(" 3. Imprimir Arvore em Pós-Ordem n");
68 printf(" 4. Imprimir Arvore em Pré-Ordem n");
69 printf(" 5. Inserir nó na Árvore n");
70 printf(" 6. Remover Nó da Árvore n");;
71 printf(" 7. Buscar um Nó na Árvore n");
72 printf(" 8. Atualizar um elemento de um NÓ da Árvore n");
73 printf(" 9. Encontrar o MAIOR elemento à direita da Árvore.n");
74 printf(" 10. Encontrar o MENOR elemento à esquerda da Árvore.n");
75 printf(" 11. Encontrar o MAIOR elemento da Árvore.n");
76 printf(" 12. Quantidade de NÓS da Árvore.n");
77 printf(" 13. Quantidade de NÓS FOLHAS da Árvore.n");
78 printf(" 14. Altura da Árvore.n");
79 printf(" 15. Verificar se pertence à Árvore.n");
80 printf("nnDigite a sua opcao: ");
81 scanf("%d", &opt);
82 printf("nn");
83
84 return opt;
85 }
86
87 void opcao(No *ARVORE, int op)
88 {
89 No *tmp;
90 switch(op)
91 {
92 case 0:
93 libera(ARVORE);
94 printf("nÁrvore liberada com sucesso. Aperte qualquer tecla para sair!");
95 getchar();
96 break;
97
98 case 1:
99 libera(ARVORE);
100 criarArvore(ARVORE);
101 printf("Árvore Criada com Sucesso!");
102 getchar();
103 break;
104
105 case 2:
106 exibirEmOrdem(ARVORE);
107 getchar();
108 break;
109
110 case 3:
111 exibirPreOrdem(ARVORE);
112 getchar();
113 break;
114
115 case 4:
116 exibirPosOrdem(ARVORE);
117 getchar();
118 break;
119
120 case 5:
121 printf("nDigite um valor inteiro: ");
122 scanf("%d%*c",&n);
123 inserir(&ARVORE, n);
124 getchar();
125 break;
126
127 case 6:
128 if(vazia(ARVORE))
129 {
130 printf("nA árvore está vazia! ");
131 }
132 else
133 {
134 printf("nDigite um valor inteiro: ");
135 scanf("%d%*c",&n);
136 remover(&ARVORE,n);
137 }
138 getchar();
139 break;
140
141 case 7:
142
143 getchar();
144 break;
145
146 case 8:
147
148 getchar();
149 break;
150
151 case 9:
152 if(vazia(ARVORE))
153 {
154 printf("nA árvore está vazia! ");
155 }
156 else
157 {
158 printf("nMenor DIREITA: %d", MenorEsquerda(&ARVORE));
159 }
160 getchar();
161 break;
162
163 case 10:
164 if(vazia(ARVORE))
165 {
166 printf("nA árvore está vazia! ");
167 }
168 else
169 {
170 printf("nMAIOR DIREITA: %d", MaiorDireita(&ARVORE));
171 }
172 getchar();
173 break;
174
175 case 11:
176 if(vazia(ARVORE))
177 {
178 printf("nA árvore está vazia! ");
179 }
180 else
181 {
182
183 }
184 getchar();
185 break;
186
187 case 12:
188 if(vazia(ARVORE))
189 {
190 printf("nA árvore está vazia! ");
191 }
192 else
193 {
194 printf("nQuantidade de Nós: %d", contarNos(ARVORE));
195 }
196 getchar();
197 break;
198
199 case 13:
200 if(vazia(ARVORE))
201 {
202 printf("nA árvore está vazia! ");
203 }
204 else
205 {
206 printf("nCONTAR FOLHAS: %d", contarFolhas(ARVORE));
207 }
208 getchar();
209 break;
210
211 case 14:
212 if(vazia(ARVORE))
213 {
214 printf("nA árvore está vazia! ");
215 }
216 else
217 {
218 printf("nALTURA DA ÁRVORE: %d", altura(ARVORE));
219 }
220 getchar();
221 break;
222
223 case 15:
224 if(vazia(ARVORE))
225 {
226 printf("nA árvore está vazia! ");
227 }
228 else
229 {
230 printf("nDigite um valor inteiro: ");
231 scanf("%d%*c",&n);
232 printf("nEstá na Árvore: %d", isInTree(&ARVORE,n));
233 }
234 getchar();
235 break;
236
237 default:
238 printf("nComando inválido! n");
239 }
240 }
241
242
243 int vazia(No *ARVORE)
244 {
245 return ARVORE==NULL;
246 }
247
248 void criarArvore(No **pRaiz)
249 {
250 *pRaiz = NULL;
251 }
252
253
254 void inserir(No **pRaiz, int numero)
255 {
256 if(*pRaiz == NULL)
257 {
258 *pRaiz = (No *) malloc(sizeof(No));
259 (*pRaiz)->esquerda = NULL;
260 (*pRaiz)->direita = NULL;
261 (*pRaiz)->numero = numero;
262 printf("nNó %d inserido na raíz com sucesso",(*pRaiz)->numero );
263 }
264 else
265 {
266 if(numero < (*pRaiz)->numero)
267 {
268 inserir(&(*pRaiz)->esquerda, numero);
269 printf("nNó %d inserido à esquerda com sucesso", (*pRaiz)->numero);
270 }
271 if(numero > (*pRaiz)->numero)
272 {
273 inserir(&(*pRaiz)->direita, numero);
274 printf("nNó %d inserido à direita com sucesso", (*pRaiz)->numero);
275 }
276 }
277 }
278
279 No *MaiorDireita(No **no)
280 {
281 if((*no)->direita != NULL)
282 return MaiorDireita(&(*no)->direita);
283 else
284 {
285 No *aux = *no;
286 if((*no)->esquerda != NULL) // se nao houver essa verificacao, esse nó vai perder todos
os seus filhos da esquerda!
287 *no = (*no)->esquerda;
288 else
289 *no = NULL;
290 return aux;
291 }
292 }
293
294 No *MenorEsquerda(No **no)
295 {
296 if((*no)->esquerda != NULL)
297 return MenorEsquerda(&(*no)->esquerda);
298 else
299 {
300 No *aux = *no;
301 if((*no)->direita != NULL) // se nao houver essa verificacao, esse nó vai perder todos
os seus filhos da direita!
302 *no = (*no)->direita;
303 else
304 *no = NULL;
305 return aux;
306 }
307 }
308
309 void remover(No **pRaiz, int numero)
310 {
311 if(*pRaiz == NULL) // esta verificacao serve para caso o numero nao exista na arvore.
312 {
313 printf("Numero nao existe na arvore!");
314 getch();
315 return;
316 }
317 if(numero < (*pRaiz)->numero)
318 remover(&(*pRaiz)->esquerda, numero);
319 else if(numero > (*pRaiz)->numero)
320 remover(&(*pRaiz)->direita, numero);
321 else // se nao eh menor nem maior, logo, eh o numero que estou procurando! :)
322 {
323 No *pAux = *pRaiz; // quem programar no Embarcadero vai ter que declarar o pAux no
inicio do void! :[
324 if (((*pRaiz)->esquerda == NULL) && ((*pRaiz)->direita == NULL)) // se nao
houver filhos...
325 {
326 free(pAux);
327 (*pRaiz) = NULL;
328 }
329 else // so tem o filho da direita
330 {
331 if ((*pRaiz)->esquerda == NULL)
332 {
333 (*pRaiz) = (*pRaiz)->direita;
334 pAux->direita = NULL;
335 free(pAux);
336 pAux = NULL;
337 }
338 else //so tem filho da esquerda
339 {
340 if ((*pRaiz)->direita == NULL)
341 {
342 (*pRaiz) = (*pRaiz)->esquerda;
343 pAux->esquerda = NULL;
344 free(pAux);
345 pAux = NULL;
346 }
347 else //Escolhi fazer o maior filho direito da subarvore esquerda.
348 {
349 pAux = MaiorDireita(&(*pRaiz)->esquerda); //se vc quiser usar o Menor da
esquerda, so o que mudaria seria isso:
350 pAux->esquerda = (*pRaiz)->esquerda; // pAux =
MenorEsquerda(&(*pRaiz)->direita);
351 pAux->direita = (*pRaiz)->direita;
352 (*pRaiz)->esquerda = (*pRaiz)->direita = NULL;
353 free((*pRaiz));
354 *pRaiz = pAux;
355 pAux = NULL;
356 }
357 }
358 }
359 }
360 }
361
362 void exibirEmOrdem(No *pRaiz)
363 {
364 if(pRaiz != NULL)
365 {
366 exibirEmOrdem(pRaiz->esquerda);
367 printf("%d | ", pRaiz->numero);
368 exibirEmOrdem(pRaiz->direita);
369 }
370 }
371
372 void exibirPreOrdem(No *pRaiz)
373 {
374 if(pRaiz != NULL)
375 {
376 printf("%d | ", pRaiz->numero);
377 exibirPreOrdem(pRaiz->esquerda);
378 exibirPreOrdem(pRaiz->direita);
379 }
380 }
381
382 void exibirPosOrdem(No *pRaiz)
383 {
384 if(pRaiz != NULL)
385 {
386 exibirPosOrdem(pRaiz->esquerda);
387 exibirPosOrdem(pRaiz->direita);
388 printf("%d | ", pRaiz->numero);
389 }
390 }
391
392 int contarNos(No *pRaiz)
393 {
394 if(pRaiz == NULL)
395 return 0;
396 else
397 return 1 + contarNos(pRaiz->esquerda) + contarNos(pRaiz->direita);
398 }
399
400 int contarFolhas(No *pRaiz)
401 {
402 if(pRaiz == NULL)
403 return 0;
404 if(pRaiz->esquerda == NULL && pRaiz->direita == NULL)
405 return 1;
406 return contarFolhas(pRaiz->esquerda) + contarFolhas(pRaiz->direita);
407 }
408
409 int maior(int a, int b)
410 {
411 if(a > b)
412 return a;
413 else
414 return b;
415 }//maior
416
417
418 int altura(No *pRaiz)
419 {
420 if((pRaiz == NULL) || (pRaiz->esquerda == NULL && pRaiz->direita == NULL))
421 return 0;
422 else
423 return 1 + maior(altura(pRaiz->esquerda), altura(pRaiz->direita));
424 }
425
426 /* Função que verifica se um elemento pertence ou não à árvore */
427 int isInTree(No* pRaiz, int num)
428 {
429 if(vazia(&pRaiz)) /* Se a árvore estiver vazia, então retorna 0 */
430 {
431 return 0;
432 }
433
434 /* O operador lógico || interrompe a busca quando o elemento for encontrado */
435 return pRaiz->numero==num || isInTree(pRaiz->esquerda, num) || isInTree(pRaiz->direita, num);
436 }
437
438 No* libera(No* pRaiz)
439 {
440 if (!vazia(&pRaiz))
441 {
442 libera(pRaiz->esquerda); /* libera sae */
443 libera(pRaiz->direita); /* libera sad */
444 free(pRaiz); /* libera raiz */
445 }
446 return NULL;
447 }
448

Mais conteúdo relacionado

Mais procurados

Lista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no FinalLista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no FinalElaine Cecília Gatto
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Elaine Cecília Gatto
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaElaine Cecília Gatto
 
Lista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamicaLista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamicaElaine Cecília Gatto
 
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no InícioLista Encadeada: Inserção no Início
Lista Encadeada: Inserção no InícioElaine Cecília Gatto
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando CVinícius Hax
 
Hash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático OperaçõesHash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático OperaçõesElaine Cecília Gatto
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultosDiego Honorio
 
Lista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circularLista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circularElaine Cecília Gatto
 
Lista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circularLista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circularElaine Cecília Gatto
 

Mais procurados (20)

Lista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no FinalLista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no Final
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Arvore binária
Arvore bináriaArvore binária
Arvore binária
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Lista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamicaLista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamica
 
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no InícioLista Encadeada: Inserção no Início
Lista Encadeada: Inserção no Início
 
Pilha dinâmica
Pilha dinâmicaPilha dinâmica
Pilha dinâmica
 
Fila circular dinamica
Fila circular dinamicaFila circular dinamica
Fila circular dinamica
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Árvore Binária em C
Árvore Binária em CÁrvore Binária em C
Árvore Binária em C
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Hash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático OperaçõesHash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático Operações
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultos
 
Lista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circularLista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circular
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Lista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circularLista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circular
 

Mais de Elaine Cecília Gatto

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaElaine Cecília Gatto
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaElaine Cecília Gatto
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Elaine Cecília Gatto
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCElaine Cecília Gatto
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxElaine Cecília Gatto
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Elaine Cecília Gatto
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarElaine Cecília Gatto
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesElaine Cecília Gatto
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...Elaine Cecília Gatto
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationElaine Cecília Gatto
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfElaine Cecília Gatto
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Elaine Cecília Gatto
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...Elaine Cecília Gatto
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoElaine Cecília Gatto
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsElaine Cecília Gatto
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoElaine Cecília Gatto
 

Mais de Elaine Cecília Gatto (20)

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
 
entrevista r7.pdf
entrevista r7.pdfentrevista r7.pdf
entrevista r7.pdf
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
 
Empoderamento Feminino
Empoderamento FemininoEmpoderamento Feminino
Empoderamento Feminino
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
 
Curtinhas de sábado.pdf
Curtinhas de sábado.pdfCurtinhas de sábado.pdf
Curtinhas de sábado.pdf
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
 
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bitsCheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 

Último

O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.denisecompasso2
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVlenapinto
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfJuliana Barbosa
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...SileideDaSilvaNascim
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...marcelafinkler
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022LeandroSilva126216
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubeladrianaguedesbatista
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 

Último (20)

O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 

Árvore Binária

  • 1. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <locale.h> 4 5 struct No 6 { 7 int numero; 8 struct No *esquerda; 9 struct No *direita; 10 }; 11 typedef struct No No; 12 13 int n, tam; 14 15 int altura(No *pRaiz); 16 int maior(int a, int b); 17 int contarFolhas(No *pRaiz); 18 int contarNos(No *pRaiz); 19 void exibirPosOrdem(No *pRaiz); 20 void exibirPreOrdem(No *pRaiz); 21 void exibirEmOrdem(No *pRaiz); 22 void remover(No **pRaiz, int numero); 23 No *MenorEsquerda(No **no); 24 No *MaiorDireita(No **no); 25 void inserir(No **pRaiz, int numero); 26 void criarArvore(No **pRaiz); 27 int isInTree(No* pRaiz, int num); 28 No* libera(No* pRaiz); 29 30 int main() 31 { 32 tam=0; 33 setlocale(LC_ALL, "Portuguese"); 34 No *ARVORE = (No *) malloc(sizeof(No)); 35 if(!ARVORE) 36 { 37 printf("nSem memória disponível!n"); 38 exit(1); 39 } 40 else 41 { 42 criarArvore(ARVORE); 43 int opt; 44 45 do 46 { 47 system("cls"); 48 opt=menu(); 49 opcao(ARVORE,opt); 50 getchar(); 51 } 52 while(opt); 53 free(ARVORE); 54 return 0; 55 } 56 } 57 58 int menu(void) 59 { 60 int opt; 61 62 printf("nn============================================================n"); 63 printf(" Escolha a opcaon"); 64 printf(" 0. Sair n"); 65 printf(" 1. Zerar Árvore n"); 66 printf(" 2. Imprimir Arvore em Ordem n"); 67 printf(" 3. Imprimir Arvore em Pós-Ordem n"); 68 printf(" 4. Imprimir Arvore em Pré-Ordem n"); 69 printf(" 5. Inserir nó na Árvore n"); 70 printf(" 6. Remover Nó da Árvore n");; 71 printf(" 7. Buscar um Nó na Árvore n"); 72 printf(" 8. Atualizar um elemento de um NÓ da Árvore n"); 73 printf(" 9. Encontrar o MAIOR elemento à direita da Árvore.n"); 74 printf(" 10. Encontrar o MENOR elemento à esquerda da Árvore.n"); 75 printf(" 11. Encontrar o MAIOR elemento da Árvore.n"); 76 printf(" 12. Quantidade de NÓS da Árvore.n"); 77 printf(" 13. Quantidade de NÓS FOLHAS da Árvore.n"); 78 printf(" 14. Altura da Árvore.n"); 79 printf(" 15. Verificar se pertence à Árvore.n"); 80 printf("nnDigite a sua opcao: "); 81 scanf("%d", &opt); 82 printf("nn"); 83 84 return opt;
  • 2. 85 } 86 87 void opcao(No *ARVORE, int op) 88 { 89 No *tmp; 90 switch(op) 91 { 92 case 0: 93 libera(ARVORE); 94 printf("nÁrvore liberada com sucesso. Aperte qualquer tecla para sair!"); 95 getchar(); 96 break; 97 98 case 1: 99 libera(ARVORE); 100 criarArvore(ARVORE); 101 printf("Árvore Criada com Sucesso!"); 102 getchar(); 103 break; 104 105 case 2: 106 exibirEmOrdem(ARVORE); 107 getchar(); 108 break; 109 110 case 3: 111 exibirPreOrdem(ARVORE); 112 getchar(); 113 break; 114 115 case 4: 116 exibirPosOrdem(ARVORE); 117 getchar(); 118 break; 119 120 case 5: 121 printf("nDigite um valor inteiro: "); 122 scanf("%d%*c",&n); 123 inserir(&ARVORE, n); 124 getchar(); 125 break; 126 127 case 6: 128 if(vazia(ARVORE)) 129 { 130 printf("nA árvore está vazia! "); 131 } 132 else 133 { 134 printf("nDigite um valor inteiro: "); 135 scanf("%d%*c",&n); 136 remover(&ARVORE,n); 137 } 138 getchar(); 139 break; 140 141 case 7: 142 143 getchar(); 144 break; 145 146 case 8: 147 148 getchar(); 149 break; 150 151 case 9: 152 if(vazia(ARVORE)) 153 { 154 printf("nA árvore está vazia! "); 155 } 156 else 157 { 158 printf("nMenor DIREITA: %d", MenorEsquerda(&ARVORE)); 159 } 160 getchar(); 161 break; 162 163 case 10: 164 if(vazia(ARVORE)) 165 { 166 printf("nA árvore está vazia! "); 167 } 168 else
  • 3. 169 { 170 printf("nMAIOR DIREITA: %d", MaiorDireita(&ARVORE)); 171 } 172 getchar(); 173 break; 174 175 case 11: 176 if(vazia(ARVORE)) 177 { 178 printf("nA árvore está vazia! "); 179 } 180 else 181 { 182 183 } 184 getchar(); 185 break; 186 187 case 12: 188 if(vazia(ARVORE)) 189 { 190 printf("nA árvore está vazia! "); 191 } 192 else 193 { 194 printf("nQuantidade de Nós: %d", contarNos(ARVORE)); 195 } 196 getchar(); 197 break; 198 199 case 13: 200 if(vazia(ARVORE)) 201 { 202 printf("nA árvore está vazia! "); 203 } 204 else 205 { 206 printf("nCONTAR FOLHAS: %d", contarFolhas(ARVORE)); 207 } 208 getchar(); 209 break; 210 211 case 14: 212 if(vazia(ARVORE)) 213 { 214 printf("nA árvore está vazia! "); 215 } 216 else 217 { 218 printf("nALTURA DA ÁRVORE: %d", altura(ARVORE)); 219 } 220 getchar(); 221 break; 222 223 case 15: 224 if(vazia(ARVORE)) 225 { 226 printf("nA árvore está vazia! "); 227 } 228 else 229 { 230 printf("nDigite um valor inteiro: "); 231 scanf("%d%*c",&n); 232 printf("nEstá na Árvore: %d", isInTree(&ARVORE,n)); 233 } 234 getchar(); 235 break; 236 237 default: 238 printf("nComando inválido! n"); 239 } 240 } 241 242 243 int vazia(No *ARVORE) 244 { 245 return ARVORE==NULL; 246 } 247 248 void criarArvore(No **pRaiz) 249 { 250 *pRaiz = NULL; 251 } 252
  • 4. 253 254 void inserir(No **pRaiz, int numero) 255 { 256 if(*pRaiz == NULL) 257 { 258 *pRaiz = (No *) malloc(sizeof(No)); 259 (*pRaiz)->esquerda = NULL; 260 (*pRaiz)->direita = NULL; 261 (*pRaiz)->numero = numero; 262 printf("nNó %d inserido na raíz com sucesso",(*pRaiz)->numero ); 263 } 264 else 265 { 266 if(numero < (*pRaiz)->numero) 267 { 268 inserir(&(*pRaiz)->esquerda, numero); 269 printf("nNó %d inserido à esquerda com sucesso", (*pRaiz)->numero); 270 } 271 if(numero > (*pRaiz)->numero) 272 { 273 inserir(&(*pRaiz)->direita, numero); 274 printf("nNó %d inserido à direita com sucesso", (*pRaiz)->numero); 275 } 276 } 277 } 278 279 No *MaiorDireita(No **no) 280 { 281 if((*no)->direita != NULL) 282 return MaiorDireita(&(*no)->direita); 283 else 284 { 285 No *aux = *no; 286 if((*no)->esquerda != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da esquerda! 287 *no = (*no)->esquerda; 288 else 289 *no = NULL; 290 return aux; 291 } 292 } 293 294 No *MenorEsquerda(No **no) 295 { 296 if((*no)->esquerda != NULL) 297 return MenorEsquerda(&(*no)->esquerda); 298 else 299 { 300 No *aux = *no; 301 if((*no)->direita != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da direita! 302 *no = (*no)->direita; 303 else 304 *no = NULL; 305 return aux; 306 } 307 } 308 309 void remover(No **pRaiz, int numero) 310 { 311 if(*pRaiz == NULL) // esta verificacao serve para caso o numero nao exista na arvore. 312 { 313 printf("Numero nao existe na arvore!"); 314 getch(); 315 return; 316 } 317 if(numero < (*pRaiz)->numero) 318 remover(&(*pRaiz)->esquerda, numero); 319 else if(numero > (*pRaiz)->numero) 320 remover(&(*pRaiz)->direita, numero); 321 else // se nao eh menor nem maior, logo, eh o numero que estou procurando! :) 322 { 323 No *pAux = *pRaiz; // quem programar no Embarcadero vai ter que declarar o pAux no inicio do void! :[ 324 if (((*pRaiz)->esquerda == NULL) && ((*pRaiz)->direita == NULL)) // se nao houver filhos... 325 { 326 free(pAux); 327 (*pRaiz) = NULL; 328 } 329 else // so tem o filho da direita 330 { 331 if ((*pRaiz)->esquerda == NULL) 332 {
  • 5. 333 (*pRaiz) = (*pRaiz)->direita; 334 pAux->direita = NULL; 335 free(pAux); 336 pAux = NULL; 337 } 338 else //so tem filho da esquerda 339 { 340 if ((*pRaiz)->direita == NULL) 341 { 342 (*pRaiz) = (*pRaiz)->esquerda; 343 pAux->esquerda = NULL; 344 free(pAux); 345 pAux = NULL; 346 } 347 else //Escolhi fazer o maior filho direito da subarvore esquerda. 348 { 349 pAux = MaiorDireita(&(*pRaiz)->esquerda); //se vc quiser usar o Menor da esquerda, so o que mudaria seria isso: 350 pAux->esquerda = (*pRaiz)->esquerda; // pAux = MenorEsquerda(&(*pRaiz)->direita); 351 pAux->direita = (*pRaiz)->direita; 352 (*pRaiz)->esquerda = (*pRaiz)->direita = NULL; 353 free((*pRaiz)); 354 *pRaiz = pAux; 355 pAux = NULL; 356 } 357 } 358 } 359 } 360 } 361 362 void exibirEmOrdem(No *pRaiz) 363 { 364 if(pRaiz != NULL) 365 { 366 exibirEmOrdem(pRaiz->esquerda); 367 printf("%d | ", pRaiz->numero); 368 exibirEmOrdem(pRaiz->direita); 369 } 370 } 371 372 void exibirPreOrdem(No *pRaiz) 373 { 374 if(pRaiz != NULL) 375 { 376 printf("%d | ", pRaiz->numero); 377 exibirPreOrdem(pRaiz->esquerda); 378 exibirPreOrdem(pRaiz->direita); 379 } 380 } 381 382 void exibirPosOrdem(No *pRaiz) 383 { 384 if(pRaiz != NULL) 385 { 386 exibirPosOrdem(pRaiz->esquerda); 387 exibirPosOrdem(pRaiz->direita); 388 printf("%d | ", pRaiz->numero); 389 } 390 } 391 392 int contarNos(No *pRaiz) 393 { 394 if(pRaiz == NULL) 395 return 0; 396 else 397 return 1 + contarNos(pRaiz->esquerda) + contarNos(pRaiz->direita); 398 } 399 400 int contarFolhas(No *pRaiz) 401 { 402 if(pRaiz == NULL) 403 return 0; 404 if(pRaiz->esquerda == NULL && pRaiz->direita == NULL) 405 return 1; 406 return contarFolhas(pRaiz->esquerda) + contarFolhas(pRaiz->direita); 407 } 408 409 int maior(int a, int b) 410 { 411 if(a > b) 412 return a; 413 else 414 return b;
  • 6. 415 }//maior 416 417 418 int altura(No *pRaiz) 419 { 420 if((pRaiz == NULL) || (pRaiz->esquerda == NULL && pRaiz->direita == NULL)) 421 return 0; 422 else 423 return 1 + maior(altura(pRaiz->esquerda), altura(pRaiz->direita)); 424 } 425 426 /* Função que verifica se um elemento pertence ou não à árvore */ 427 int isInTree(No* pRaiz, int num) 428 { 429 if(vazia(&pRaiz)) /* Se a árvore estiver vazia, então retorna 0 */ 430 { 431 return 0; 432 } 433 434 /* O operador lógico || interrompe a busca quando o elemento for encontrado */ 435 return pRaiz->numero==num || isInTree(pRaiz->esquerda, num) || isInTree(pRaiz->direita, num); 436 } 437 438 No* libera(No* pRaiz) 439 { 440 if (!vazia(&pRaiz)) 441 { 442 libera(pRaiz->esquerda); /* libera sae */ 443 libera(pRaiz->direita); /* libera sad */ 444 free(pRaiz); /* libera raiz */ 445 } 446 return NULL; 447 } 448