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.118 ]
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
Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa
Análise dos Métodos de Ordenação usados em Algoritmos Computacionais
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?









