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.649 ]
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 - Listas Duplamente Encadeadas
Linguagem C - Funções Variádicas
Dicas para aprender programação
Análise dos Métodos de Ordenação usados em Algoritmos Computacionais
Linguagem C - Listas Duplamente Encadeadas
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Conheça o Zashterminal, um terminal moderno com IA
DOOM Carniceiro: rode o Meatgrinder com uzdoom (Gentoo e Ubuntu)
Samba 4 AD-DC 2026: Como instalar e configurar um Active Directory (via APT-GET)
[Resolvido] Sumiço de redes e micro quedas no iwd/iwgtk (Realtek rtw88)
Como Configurar DNS Reverso (PTR) em Ambientes Linux e Microsoft
Linux MInt nao reconhece placa de som (1)
Midia de instalação LM-21.3 não inicializa (12)









