Linguagem C - Árvores Binárias
Neste artigo, falarei sobre o que é e como implementar uma estrutura de dados chamada Árvore Binária. Com tempos de pesquisa, inserção e remoção expressivamente melhores que de listas encadeadas, esta estrutura é usada principalmente em bancos de dados e sistemas de arquivos.
[ Hits: 53.133 ]
Por: Enzo de Brito Ferber em 07/05/2015 | Blog: http://www.maximasonorizacao.com.br
/* fat.c * * Linguagem C - Árvores Binárias * Viva O Linux * * Enzo Ferber */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> double fat (double n) { if (n == 1) return 1; return n * fat(n - 1); // return (n == 1) ? 1 : n * fat(n - 1); } int main (int argc, char *argv[]) { register int i; for (i = 1; i < argc; i++) printf("%s: %.0lf ", argv[i], fat( atof(argv[i]))); return 0; }
/* fib.c
*
* Linguagem C - Árvores Binárias
* Viva O Linux
*
* Enzo Ferber
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
double fib (double n)
{
if (n == 0 || n == 1) return 1;
return fib(n - 1) + fib(n - 2);
// return (n == 0 || n == 1) ? 1 : fib(n - 1) + fib(n - 2);
}
int main (int argc, char *argv[])
{
register int i;
for (i = 1; i < argc; i++)
printf("%s: %.0lf
", argv[i], fib(atof(argv[i])));
return 0;
}
/* bbin.c
*
* Linguagem C - Árvores Binárias
* Viva O Linux
*
* Enzo Ferber
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int bbin (int *a, int min, int max, int info)
{
int pos = (min + max) / 2;
if (a[pos] == info) return pos;
else if (min >= max) return -1;
else if (info > a[pos]) return bbin(a, pos + 1, max, info);
else return bbin(a, min, pos - 1, info);
return -1;
}
int main (void)
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("1: %d
", bbin(a, 0, 10, 1));
printf("5: %d
", bbin(a, 0, 10, 5));
printf("8: %d
", bbin(a, 0, 10, 8));
printf("0: %d
", bbin(a, 0, 10, 0));
printf("9: %d
", bbin(a, 0, 10, 9));
return 0;
}
/* bbin2.c
*
* Linguagem C - Árvores Binárias
* Viva O Linux
*
* Enzo Ferber : enzoferber@gmail.com
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define LIMIT 50000
int counter;
int bbin (int *a, int min, int max, int info)
{
int pos = (min + max) / 2;
counter++;
if (a[pos] == info) return pos;
else if (min >= max) return -1;
else if (info > a[pos]) return bbin(a, pos + 1, max, info);
else return bbin(a, min, pos - 1, info);
return -1;
}
int main (void)
{
int a[ LIMIT ];
register int i;
int n;
for (i = 0; i < LIMIT; i++)
a[i] = i + 1;
printf("Digite -1 para sair
");
while (1) {
printf("Digite um número: ");
scanf("%d", &n);
if (n == -1) break;
// contador
counter = 0;
printf("Posicao no vetor: %d
", bbin(a, 0, LIMIT, n));
printf("Operacoes necessarias: %d
", counter);
}
return 0;
}
Linguagem C - Listas Duplamente Encadeadas
Linguagem C - Funções Variádicas
Dicas para aprender programação
Linguagem C - Listas Duplamente Encadeadas
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









