Pessoal, sei que esse fórum é sobre Java, e foge do foco da proposta dele postarmos algo em outras linguagens.
Mas estou com uma dúvida cruel e um problema sério em linguagem C, sendo que os outros fóruns que pesquisei não são tão ativos e dinâmicos quanto o GUJ. Por isso pediria a gentileza de, se alguém aqui entender de linguagem C, mais especificamente de árvores binárias, que me ajudasse a implementar alguns métodos (tá, sei que em C são funções, mas gosto da nomenclatura do Java :D).
Tenho que construir uma árvore onde deve implementar os métodos de inserir, excluir, pesquisar, listar, e contar elementos. Já consegui fazer inserir, listar, contar. Falta pesquisar e excluir.
Na rotina de pesquisar estou perdendo os cabelos, pois não sei trabalhar com ponteiros direito, dá erro no método main() na linha 118 , o erro é o seguinte:
syntaxe error before “struct”
Alguém pode ajudar aí ?
O código está logo abaixo:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct no
{
char chave[20];
int dado;
struct no *esq;
struct no *dir;
};
// Rotina para se inserir elementos na árvore
void inserir(struct no **r, char *chave, int dado)
{
int cmp;
if(*r==0)
{
// Temos aqui uma árvore vazia
*r = malloc(sizeof(struct no));
strcpy((*r)->chave, chave);
(*r)->dado = dado;
(*r)->esq = 0;
(*r)->dir = 0;
return;
}
cmp = strcmp((*r)->chave, chave);
if(cmp==0)
{
(*r)->dado = dado;
return;
}
if(cmp>0)
{
inserir(&((*r)->esq),chave,dado);
return;
}
inserir(&((*r)->dir),chave,dado);
return;
}
// Método para se pesquisar um elemento na árvore
struct no *pesquisa(struct no **r, char *chave)
{
int comp;
if(r == 0) // Não olhar elemento
return 0;
comp = strcmp(chave,(*r)->chave);
if(comp == 0) // elemento na raiz
return(*r);
if(comp >0)
return(pesquisa(&((*r)->esq), chave));
else
return(pesquisa(&((*r)->dir), chave));
}
// Rotina para se listar a árvore
void imprimir(struct no *v)
{
if(v!=NULL)
{
printf("%s %d\n", v->chave, v->dado);
imprimir(v->esq);
imprimir(v->dir);
}
}
// Método para se buscar o tamanho da árvore
int tamanho(struct no *r)
{
if(r==0)return 0;
return (1+tamanho(r->esq)+tamanho(r->dir));
}
main()
{
int altura;
struct no *raiz = 0;
struct no *pesq;
// Invoca-se método para se inserir elementos na árvore
inserir(&raiz, "J", 1);
inserir(&raiz, "O", 2);
inserir(&raiz, "D", 3);
inserir(&raiz, "Q", 4);
inserir(&raiz, "G", 5);
inserir(&raiz, "L", 6);
inserir(&raiz, "C", 7);
// Invoca método para se listar os elementos da árvore
imprimir(raiz);
// Invoca-se método para se saber a altura da árvore
altura = tamanho(raiz);
// Imprime-se a altura da árvore
printf("\nO tamanho da arvore e %d\n", altura);
// Invoca método para se pesqisar um elemento na árvore
pesq = struct no *pesquisa(&raiz,"O");
// Lista-se o elemento pesquisado
printf("%s %d", (pesq)->chave, (pesq)->dado);
getch();
}