Pdruu 0 Denunciar post Postado Junho 21, 2011 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
Renato Utsch 24 Denunciar post Postado Junho 21, 2011 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
Pdruu 0 Denunciar post Postado Junho 27, 2011 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
Bruno Alano 0 Denunciar post Postado Junho 27, 2011 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
guidjos 65 Denunciar post Postado Junho 28, 2011 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
Pdruu 0 Denunciar post Postado Junho 28, 2011 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
Renato Utsch 24 Denunciar post Postado Junho 30, 2011 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
Pdruu 0 Denunciar post Postado Junho 30, 2011 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