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.746 ]
Por: Enzo de Brito Ferber em 07/05/2015 | Blog: http://www.maximasonorizacao.com.br
Inserir(elemento) {
Se (elemento <= raiz) Inserir (arvore esquerda)
Senão Inserir (arquivo direita)
}
typedef struct folha* Folha;
struct folha {
int info;
Folha esquerda;
Folha direita;
};
/* @ Folha inserir (Folha raiz, int info)
*
* Argumentos
* ----------
* raiz ponteiro para 'struct folha', estrutura de dado básica para
* construção da árvore
* info nova informação a ser inserida
*
* Retorno
* -------
* NULL em caso de erro
* Folha em caso de sucesso (nó 'raiz')
*/
Folha inserir (Folha raiz, int info)
{
if (!raiz) {
/* significa que o ponteiro é nulo, e que está é a posição
* para inserção.
*
* 1. Alocar e checar memória
*/
if (!(raiz = FOLHA)) {
perror("inserir:malloc()");
return NULL;
}
/* 2. Cópia da Informação
* 3. Ponteiros de referência
* 4. Retorno da nova folha
*/
raiz->info = info;
raiz->esquerda = raiz->direita = NULL;
return raiz;
} else if (info > raiz->info)
raiz->direita = inserir (raiz->direita, info);
else
raiz->esquerda = inserir (raiz->esquerda, info);
/* retorna o ponteiro raiz
*
* Isso é necessário pois a função inserir é recursiva, e seu retorno
* é sempre atribuido ao mesmo ponteiro passado como argumento 'raiz',
*
* raiz->esquerda = inserir(raiz->esquerda,info)
* raiz->direita = inserir(raiz->direta, info)
*/
return raiz;
}
Folha arvore = NULL; arvore = inserir(arvore, 4); ... // as chamadas subsequentes a inserir serão: inserir (arvore, 4);
Folha inserir (Folha raiz, int info)
if (!raiz) {
/* significa que o ponteiro é nulo, e que está é a posição
* para inserção.
*
* 1. Alocar e checar memória
*/
if (!(raiz = (Folha) malloc (sizeof(struct folha)))) {
perror("inserir:malloc()");
return NULL;
}
/* 2. Cópia da Informação
* 3. Ponteiros de referência
* 4. Retorno da nova folha
*/
raiz->info = info;
raiz->esquerda = raiz->direita = NULL;
return raiz;
}
else if (info > raiz->info) raiz->direita = inserir (raiz->direita, info); else raiz->esquerda = inserir (raiz->esquerda, info); return raiz;
raiz->direita = inserir (raiz->direita, info);
raiz->esquerda = inserir (raiz->esquerda, info);
Linguagem C - Funções Variádicas
Linguagem C - Listas Duplamente Encadeadas
Linguagem C - Listas Duplamente Encadeadas
Dicas para aprender programação
Instalação Completa e Configuração Básica do Void Linux
A Fundação da Confiança Digital: A Importância Estratégica de uma PKI CA na Segurança de Dados
Como enviar dicas ou artigos para o Viva o Linux
Como Ativar a Aceleração por GPU (ROCm) no Ollama para AMD Navi 10 (RX 5700 XT / 5600) no Gentoo
Samba 4 AD-DC 2026: Backup & Restore
Samba 4 AD-DC 2026: LAPS (Randomizando senhas locais).
Cairo Dock ainda funcional nos dias de hoje
Configuração de IP fixo via nmcli e resolução de nomes via /etc/hosts no Gentoo









