Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pdruu

[Resolvido] Arvore Binaria de Pesquisa

Recommended Posts

Galeraa.. to precisando de uma maozinha.. tenhu que implementar uma arvore binaria de pesquisa para inserir nome, telefone e email de uma pessoa.. tenho uma prova de conceito i preciso implementar com ela..

c alguem puder da uma força.. vlww

 

   typedef struct No{
   int numero;
   struct No *pEsquerda;
   struct No *pDireita;
}No;

[editar] Iniciar

void criarArvore(No **pRaiz){
   *pRaiz = NULL;
}

[editar] Inserção

void inserir(No **pRaiz, int numero){
   if(*pRaiz == NULL){
       *pRaiz = (No *) malloc(sizeof(No));
       (*pRaiz)->pEsquerda = NULL;
       (*pRaiz)->pDireita = NULL;
       (*pRaiz)->numero = numero;
   }else{
       if(numero < (*pRaiz)->numero)
           inserir(&(*pRaiz)->pEsquerda, numero);
       if(numero > (*pRaiz)->numero)
           inserir(&(*pRaiz)->pDireita, numero);
   }
}

[editar] Remoção

void remover(No **pRaiz, int numero){
   No *pAux = NULL;
   if(numero < (*pRaiz)->numero)
       remover(&(*pRaiz)->pEsquerda, numero);
   else if (numero > (*pRaiz)->numero)
       remover(&(*pRaiz)->pDireita, numero);
   else{
       pAux = *pRaiz;
       if((*pRaiz)->pEsquerda == NULL)
           *pRaiz = (*pRaiz)->pDireita;
       else if((*pRaiz)->pDireita == NULL)
           *pRaiz = (*pRaiz)->pEsquerda;
       else{
           noMaior(&(*pRaiz)->pEsquerda);
           (*pRaiz)->numero = pAux->numero;  
       }
   }
}

 

OU Fazendo Recursão:

 

int mydel(no **raiz){
if ((*raiz)->esq==NULL) {
                       int n = (*raiz)->info;
                       (*raiz)=(*raiz)->dir;
                       return n;
                       }
                       return (mydel(&(*raiz)->esq));
                       }

int remove(int n, no **raiz){
if((*raiz)==NULL) return 0;
if ((*raiz)->info==n){
                	if((*raiz)->esq==NULL)
                	(*raiz)=(*raiz)->dir;
                	struct no *aux;
                	aux=(*raiz);
                	free(aux);
                	}else{
                      	(*raiz)->info=mydel(&(*raiz)->dir);

                      	return 1;
}                       	
                      	if ((*raiz)->info>n) 
                      	return (remove (n,&(*raiz)-> esq));
                      	return (remove (n,&(*raiz)-> dir));


}

[editar] Exibição
[editar] Em ordem

void exibirEmOrdem(No *pRaiz){
   if(pRaiz != NULL){
       exibirEmOrdem(pRaiz->pEsquerda);
       printf("\n%i", pRaiz->numero);
       exibirEmOrdem(pRaiz->pDireita);
   }
}

[editar] Pré-ordem

void exibirPreOrdem(No *pRaiz){
   if(pRaiz != NULL){
       printf("\n%i", pRaiz->numero);
       exibirPreOrdem(pRaiz->pEsquerda);
       exibirPreOrdem(pRaiz->pDireita);
   }
}

[editar] Pós-ordem

void exibirPosOrdem(No *pRaiz){
   if(pRaiz != NULL){
       exibirPosOrdem(pRaiz->pEsquerda);
       exibirPosOrdem(pRaiz->pDireita);
       printf("\n%i", pRaiz->numero);
   }
}

[editar] Contar nós

int contarNos(No *pRaiz){
  if(pRaiz == NULL)
       return 0;
  else
       return 1 + contarNos(pRaiz->pEsquerda) + contarNos(pRaiz->pDireita);
}

[editar] Contar folhas

int contarFolhas(No *pRaiz){
  if(pRaiz == NULL)
       return 0;
  if(pRaiz->pEsquerda == NULL && pRaiz->pDireita == NULL)
       return 1;
  return 0 + contarFolhas(pRaiz->pEsquerda) + contarFolhas(pRaiz->pDireita);
}

[editar] Altura da árvore

int maior(int a, int B){
   if(a > B)
       return a;
   else
       return b;
}

int altura(No *pRaiz){
  if((pRaiz == NULL) || (pRaiz->pEsquerda == NULL && pRaiz->pDireita == NULL))
  	return 0;
  else
  	return 1 + maior(altura(pRaiz->pEsquerda), altura(pRaiz->pDireita));
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Por favor, use a tag

 para postar seu código.

 

 

Deixe-me ver se entendi: você copiou o código da wikipédia (ou outro site parecido) e quer que nós implementemos essa árvore binária para você? Ah, e por falar nisso, o que é uma árvore binária? Eu não sei, como vou te ajudar com um programa que não sei para que serve. Seja mais descritivo em suas respostas.

 

 

Tente, você consegue.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai q você c engana colega!

esse codigo o professor disponibilizou para a turma!

c ele copiou d algum lugar nao sei!

i nao pedi pra fazer i sim pra dar uma ajuda.. uma ideia!

Mais pod fica tranquilo q ja consegui..

i ja q você nao sabe o q é arvore binaria.. pesquisa nos site q você sitou ai!

e ai eu disponibilizo pra você o codigo..

 

belo moderador! :joia:

 

MUITO GRATO PELA AJUDAAA! :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pdruu, primeiramente aprenda escrever de uma maneira decente e que seja "entendível". E se você está sendo irônico na frase "belo moderador", por que veio pedir ajuda no fórum de C/C++? Você não se acha o "Sr. f***"? Se você se considera tão bom, sendo melhor que o Renato Utsch, faça seu próprio código e tente arrumar esse lixo que você chama de código.

 

Especifique o que você quer, e tente implementar você mesmo. Se houver erro, ai sim você publica o código no Fórum iMasters pedindo ajuda. Acha mesmo que alguém irá fazer uma implementação gratuitamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai q você c engana colega!

esse codigo o professor disponibilizou para a turma!

c ele copiou d algum lugar nao sei!

i nao pedi pra fazer i sim pra dar uma ajuda.. uma ideia!

Mais pod fica tranquilo q ja consegui..

i ja q você nao sabe o q é arvore binaria.. pesquisa nos site q você sitou ai!

e ai eu disponibilizo pra você o codigo..

 

belo moderador! :joia:

 

MUITO GRATO PELA AJUDAAA! :clap:

 

Em primeiro lugar, respeite a todos do fórum.

 

Em segundo, escreva decentemente. Se você não consegue escrever com português decente, desista da programação.

 

Tem dúvidas sobre árvores binárias? O conceito é simples, e não deveria ser problema pra você. Especialmente se você prestou atenção às aulas ou sabe ler.

 

Se tiver alguma dúvida específica sobre C ou C++, pergunte aqui.

 

Seu código, ou o de seu professor, parece indeciso. Se estiverem tentando programar em C, sugiro que não façam cast do retorno de funções retornando void *. Se estiverem tentando escrever C++, sugiro definir uma classe ao invés de structs + funções.

 

A função criarArvore é inútil:

 

No *arvore = NULL; // muito melhor que:

No *arvore;
criarArvore(&arvore);

 

Ela deveria alocar memória para um nó. Sugiro inclusive que a renomeie para "criarNo".

 

Além disso, as funções de inserção e remoção são ingênuas - tanto na implementação recursiva quanto na iterativa. Você precisa verificar se o ponteiro passado é não nulo.

 

Mais uma coisa. Evite aninhamento exaustivo:

 

tipo *funcao(tipo *param)
{
   if (!param)
       return NULL;

   // manipular param
}

// A implementação acima é muito melhor que

tipo *funcao(tipo *param)
{
   if (param)
   {
       // manipular param
   }
   else
       return NULL:
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao guidjos,

Sei que tem que ter respeito e tal..

Mais pedi uma ajuda e quem tinha que mostrar respeito não mostrou, e sei que sou novo no forum e to aprendendo!

A explicação que você deu me ajudaria bastante no codigo.

Poderia ter sido a resposta do Utsch e poderia aconselhar sobre os outros erros e nao ser ironico como ele foi!

É issu.. Mal ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, tudo bem, posso ter ido meio agressivamente, você é novo no sistema de forums, ok, entendo. Eu estava com alguns problemas aquele dia.

 

Mas ainda assim não removo minha opinião de você ter tentado fazer com que fizéssemos algo para você. Lhe explicássemos de graça. Mas tá, se quiser continuar a discutir isso vamos fazer por mps.

 

 

Sobre o assunto do tópico, foi resolvido? Ou ainda não conseguiu? Poste o que você já tentou.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, tudo bem, posso ter ido meio agressivamente, você é novo no sistema de forums, ok, entendo. Eu estava com alguns problemas aquele dia.

 

Mas ainda assim não removo minha opinião de você ter tentado fazer com que fizéssemos algo para você. Lhe explicássemos de graça. Mas tá, se quiser continuar a discutir isso vamos fazer por mps.

 

 

Sobre o assunto do tópico, foi resolvido? Ou ainda não conseguiu? Poste o que você já tentou.

 

 

 

Abraços :D

 

 

ta de boa!

ta tudo resolvido!

eu consegui com a ajuda de uns brothers da faculdad!

 

falo, vlwww!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.