Ir para conteúdo
Fórum Script Brasil
  • 0

arvore binaria em c


Jefinho

Pergunta

tou com problema no meu codigo

na função listarPorNivel

ele deve listar os elementos no nivel determinado pelo usuario

porem quando peço para listar no nivel 1

ele não lista nada

no nivel 2 ele lista o elemento do nivel 1

no nivel 3 ele lista os elementos do nivel 2 e assim por diante

já mudei de toda forma mas não consegui conserta isso

ajuda ai pessoal

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

typedef struct NO{
    int n;
    char chave[20];
    struct NO *esq,*dir;
    struct NO *proxcor;
    struct NO *proxcidade;
    struct NO *proxmodelo;
    struct NO *volta;
    }no;
void inicializar(no **celula)
{
    (*celula)->proxcor =NULL;
    (*celula)->proxcidade = NULL;
    (*celula)->proxmodelo=NULL;
    (*celula)->esq=NULL;
    (*celula)->dir=NULL;
    (*celula)->volta =NULL;
}

// PROCEDIMENTO PARA AUXILIAR O INSERIR
void inserirno(char informacao[20],no **celula)
    {   
   
    if (*celula ==NULL)
    {
        *celula =(no*)malloc(sizeof(no));
        strcpy((*celula)->chave,informacao);
        (*celula)->esq =NULL;
        (*celula)->dir =NULL;
        return;
    }
    if(strcmp(informacao,(*celula)->chave)<0){
        inserirno(informacao,&(*celula)->esq);
        return;
    }
    if(strcmp(informacao,(*celula)->chave)>0){
        inserirno(informacao,&(*celula)->dir);
    }   
}

//PROCEDIMENTO PARA INSERIR

void inserir(no **celula)
{
    int v, i;
    char informacao[20];
    printf("quantos cadastro deseja fazer? ");
    scanf("%d",&v);
    for (i=0;i<v;i++)
    {
       printf("entrada: ");
       scanf("%s",&informacao[0]);
       inserirno(informacao,&(*celula));   
     }
}    

// PROCEDIMENTO PARA LISTAR EM ORDEM
void em_ordem ( no **mod) {
    if (*mod) {
        em_ordem (&(*mod)->esq);
        printf ("%s\n",(*mod)->chave);
        em_ordem (&(*mod)->dir);
    }
}

//    PROCEDIMENTO PARA LISTAGEM POR NIVEL

void listarpornivel(no **celula,int nivel)
{
    printf("ok");
    if ((nivel == 1) && (*celula !=NULL))
    {
        printf("ok");
        printf("%s\n",(*celula)->chave);
    }
    else
       {
           if ((*celula) ->esq != NULL)
           {
               listarpornivel(&(*celula)->esq ,nivel-1);
           }
           if ((*celula)->dir != NULL)
           {
               listarpornivel(&(*celula)->dir ,nivel - 1);
        }
      }
 }                          

// FUNÇÃO PRINCIPAL

int main()
{
    char opcao ,informacao[20]; 
    no *mod,*c,*cid;
    int nivel;
    //PARA INSERIR MODELO
    mod = (no*)malloc(sizeof(struct NO));
    inicializar(&mod);
    inserir(&mod);
    //PARA INSERIR COR
    c = (no*)malloc(sizeof(struct NO));
    inicializar(&c);
    inserir(&c);
    //PARA INSERIR CIDADE
    cid = (no*)malloc(sizeof(struct NO));
    inicializar(&cid);
    inserir(&cid);
    printf("nivel");
    scanf("%d",&nivel);
    listarpornivel(&mod,nivel);
  

    opcao ='o';
  while (opcao != 'e')
    {
        scanf("%s%s",&opcao,&informacao[0]);
        if ((opcao == 'p') && (informacao[0] == 'm'))
        {
            em_ordem(&mod);
        }
        if ((opcao =='p') && (informacao[0] =='c' ))
         {
             em_ordem(&c);
         }
        if ((opcao == 'p') && (informacao[0] =='t'))
         {
             em_ordem(&cid);
         }              
    }
      return 0;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...