Buen día, quisiera pedir orientación sobre éste programa, es un programa que captura datos y los forma en un árbol binario, ya comprobé y el árbol está bien creado, el problema está en el recorrido, que es por amplitud y necesita el uso de colas, en la función eliminar señalé un system pause en la instrucción donde está ''reventando'' que ni siquiera es un ciclo...
Código C++:
Ver original#include <iostream>
using namespace std;
struct nodo
{
int info, p;
nodo *llink;
nodo *rlink;
};
#define maxcola 30
struct COLA
{
int fr;
int fin;
struct nodo *cont[maxcola];
};
bool colallena (struct COLA *cola)
{
bool valor;
int pos;
if (cola->fin==maxcola) pos = 0;
else pos = cola->fin;
if ((cola->fr==pos)&& (cola->fin!=0)) valor=true;
else valor = false;
return valor;
}
void insertarcola(struct COLA *cola, struct nodo *p)
{
if (colallena (cola) == false){
if (cola->fin==maxcola) cola->fin=1;
else cola->fin=cola->fin + 1;
cola->cont[cola->fin]=p;
}
else cout << "\nERROR: No se puede insertar en la cola, ya que esta llena";
}
bool colavacia (struct COLA *cola)
{
bool valor;
if ((cola->fr==0)&& (cola->fin==0))valor=true;
else valor = false;
return valor;
}
void limpiarcola(struct COLA *cola) {
cola->fr=0;
cola->fin=0;
}
void eliminarcola(struct COLA *cola, struct nodo **q){
if (colavacia(cola)==false){
system("pause"); // al ejecutarse llega acá y revienta. if (cola->fr == maxcola) cola -> fr = 1; // no sé qué tiene mal esa instrucción
else cola->fr=cola->fr + 1;
*q=cola->cont[cola->fr];
if (cola->fr == cola->fin) limpiarcola (cola);
}
else cout << "\nERROR: No se puede eliminar de la cola, ya que esta vacia";
}
int pedir_info();
nodo *crear_nodo(int);
void insertar_nodo(nodo **, int);
void recorrer(nodo *);
int pedir_info()
{
int dato;
cout<<endl<<"Ingrese el valor para el arbol: "<<endl;
cin>>dato;
return dato;
}
nodo *crear_nodo(int dato)
{
nodo *aux;
aux
=(nodo
*)malloc(sizeof(nodo
)); aux->info=dato;
aux->llink=NULL;
aux->rlink=NULL;
return aux;
}
void insertar_nodo(nodo **arbol, int dato)
{
if(*arbol != NULL)
{
if(dato < (*arbol)->info)
insertar_nodo(&((*arbol)->llink), dato);
else
insertar_nodo(&((*arbol)->rlink), dato);
}
else
*arbol=crear_nodo(dato);
}
void recorrer(nodo *arbol)
{
COLA actual;
nodo *p;
insertarcola(&actual, arbol);
while(colavacia(&actual)==false)
{
eliminarcola(&actual, &p); // acá hace el llamado a la función
cout<<p->info;
if(p->llink!=NULL)
insertarcola(&actual, p->llink);
if(p->rlink!=NULL)
insertarcola(&actual, p->rlink);
}
}
int main()
{
nodo *arbol=NULL;
int dato=0;
char fin='n';
while(fin=='n')
{
dato=pedir_info();
insertar_nodo(&arbol, dato);
cout<<endl<<"Termino de ingresar? (y/n)"<<endl;
cin>>fin;
}
recorrer(arbol);
Muchas gracias a quien se tome el tiempo de copiarlo a un compilador y me pueda explicar!