Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a Todos!
Bom, meu problema é o seguinte, estou implementando ma arvore binaria e preciso realizar um percurso em nivel, ja fiz bastante coisa no codigo, só que não está imprimindo o percurso. Estou usando uma fila para auxiliar no percurso e minha duvida é como passar o ponteiroda fila para dentro da função de percurso, segue abaixo o codigo:
Preciso muito de ajuda, ficarei muito agradecido!
#include <stdio.h>
#include <stdlib.h>
typedef struct arv
{
int info;
struct arv* esq;
struct arv* dir;
struct arv* altura;
}arvore;
typedef struct fila
{
int info;
struct fila* prox;
}Fila;
void insere(arvore **r,int num);
int calc_no(arvore *r);
void imprime_preordem(arvore *r);
void percurso_nivel(arvore* r);
void insere_fila(Fila **f, arvore **r);
void imprime_fila(Fila* f); arvore *raiz;
raiz = NULL;
int num;
num = 15;
insere(&raiz,num);
num = 10;
insere(&raiz,num);
num = 20;
insere(&raiz,num);
num = 50;
insere(&raiz,num);
num = 8;
insere(&raiz,num);
num = 11;
insere(&raiz,num);
num = 3;
insere(&raiz,num);
printf("\n\nImpressao preordem\n\n");
imprime_preordem(raiz);
printf("\n\nnumero de nos da arvore: %d",calc_no(raiz));
percurso_nivel(raiz);
return 0;
}
void insere(arvore **r,int num)
{
arvore *novo_no;
novo_no = (arvore *)malloc(sizeof(arvore));
if(*r == NULL) //verifica se a raiz da arvore esta vazia
{
novo_no->info = num;
novo_no->esq = NULL;
novo_no->dir = NULL;
*r = novo_no;
}
else
{
if((*r)->info < num) //verifica se é maior que a raiz
{
insere(&(*r)->dir,num); // se maior que a raiz, insere no nodo direito.
}
else
{
insere(&(*r)->esq,num); // se menor que a raiz, insere no nodo esquerdo.
}
}
}
int calc_no(arvore *r) // funcao para calcular os nós de uma arvore
{
if (r == NULL)
return 0;
return 1+ calc_no(r->esq) + calc_no(r->dir);
}
void imprime_preordem(arvore *r) //pre_ordem
{
if(r!= NULL)
{
printf("%d\n", r->info);
imprime_inordem(r->esq);
imprime_inordem(r->dir);
}
}
void insere_fila(Fila f, arvore r)
{
if(r!= NULL)
{
Fila* novo; Fila* ult; Fila* primeiro;
primeiro = *f;
novo = (Fila*)malloc(sizeof(Fila));
if(*f == NULL)
{
novo->info = (*r)->info;
primeiro = novo;
ult = primeiro;
novo->prox = NULL;
}
novo->info = (*r)->info;
ult = novo;
novo->prox = NULL;
}
}
void imprime_fila(Fila *f)
{
Fila* i;
for(i= f; i!=NULL;i= i->prox)
{
printf("%d\nresultado:",i->info);
}
}
void percurso_nivel(arvore* r)
{
Fila *f;
f = NULL;
if(r == NULL)
{
return ;
}
else
{
insere_fila(&f,&r);
while(f) // depois que insere na fila uma vez eu preciso atualizar este ponteiro f.
{
if(r->esq != NULL)
{
insere_fila(&f, &r->esq);
}
if(r->dir != NULL)
{
insere_fila(&f, &r->dir);
}
}
imprime_fila(f);
}
}Carregando comentários...