Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2012, 16:38
Avatar de paula23andrea
paula23andrea
 
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 12 años
Puntos: 1
Exclamación implementación árboles binarios y colas

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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct nodo
  5. {
  6.  int info, p;
  7.  nodo *llink;
  8.  nodo *rlink;
  9. };
  10.  
  11. #define maxcola 30
  12. struct COLA
  13. {
  14.  int fr;
  15.  int fin;
  16.  struct nodo *cont[maxcola];
  17. };
  18.  
  19. bool colallena (struct COLA *cola)
  20. {
  21.      bool valor;
  22.      int pos;
  23.      if (cola->fin==maxcola) pos = 0;
  24.      else pos = cola->fin;
  25.      
  26.      if ((cola->fr==pos)&& (cola->fin!=0)) valor=true;
  27.      else valor = false;
  28.      
  29.      return valor;
  30. }      
  31.  
  32. void insertarcola(struct COLA *cola, struct nodo *p)
  33. {
  34.   if (colallena (cola) == false){
  35.   if (cola->fin==maxcola)  cola->fin=1;        
  36.   else cola->fin=cola->fin + 1;
  37.          
  38.   cola->cont[cola->fin]=p;          
  39.   }
  40.   else cout << "\nERROR: No se puede insertar en la cola, ya que esta llena";
  41. }
  42.  
  43. bool colavacia (struct COLA *cola)
  44. {
  45.      bool valor;
  46.      if ((cola->fr==0)&& (cola->fin==0))valor=true;
  47.      else valor = false;
  48.      return valor;
  49. }
  50.  
  51. void limpiarcola(struct COLA *cola) {
  52.     cola->fr=0;
  53.     cola->fin=0;
  54. }
  55.  
  56. void eliminarcola(struct COLA *cola, struct nodo **q){
  57.    
  58.    
  59.     if (colavacia(cola)==false){
  60.         system("pause");  // al ejecutarse llega acá y revienta.
  61.         if (cola->fr == maxcola) cola -> fr = 1; // no sé qué tiene mal esa instrucción
  62.         else cola->fr=cola->fr + 1;
  63.        
  64.         *q=cola->cont[cola->fr];
  65.        
  66.         if (cola->fr == cola->fin) limpiarcola (cola);
  67.                
  68.         }
  69.     else cout << "\nERROR: No se puede eliminar de la cola, ya que esta vacia";    
  70.    
  71.    
  72.    
  73.     }
  74.  
  75. int pedir_info();
  76. nodo *crear_nodo(int);
  77. void insertar_nodo(nodo **, int);
  78. void recorrer(nodo *);
  79.  
  80. int pedir_info()
  81. {
  82.  int dato;
  83.  cout<<endl<<"Ingrese el valor para el arbol: "<<endl;
  84.  cin>>dato;
  85.  return dato;
  86. }
  87.  
  88. nodo *crear_nodo(int dato)
  89. {
  90.       nodo *aux;
  91.       aux=(nodo *)malloc(sizeof(nodo));
  92.       aux->info=dato;
  93.       aux->llink=NULL;
  94.       aux->rlink=NULL;
  95.  
  96.       return aux;
  97. }  
  98.  
  99. void insertar_nodo(nodo **arbol, int dato)
  100. {
  101.      if(*arbol != NULL)
  102.      {
  103.         if(dato < (*arbol)->info)
  104.            insertar_nodo(&((*arbol)->llink), dato);
  105.         else
  106.            insertar_nodo(&((*arbol)->rlink), dato);
  107.     }
  108.      else
  109.          *arbol=crear_nodo(dato);
  110. }
  111.  
  112.  
  113. void recorrer(nodo *arbol)
  114. {
  115.  COLA actual;  
  116.  nodo *p;    
  117.  insertarcola(&actual, arbol);
  118.  
  119.  while(colavacia(&actual)==false)
  120.  {
  121.  eliminarcola(&actual, &p); // acá hace el llamado a la función
  122.  cout<<p->info;
  123.  
  124.  if(p->llink!=NULL)
  125.  insertarcola(&actual, p->llink);
  126.  
  127.  if(p->rlink!=NULL)
  128.  insertarcola(&actual, p->rlink);
  129. }
  130. }
  131.  
  132.    
  133.  
  134. int main()
  135. {
  136.  nodo *arbol=NULL;
  137.  int dato=0;
  138.  char fin='n';
  139.  
  140.  while(fin=='n')
  141.  {
  142.   dato=pedir_info();
  143.   insertar_nodo(&arbol, dato);
  144.   cout<<endl<<"Termino de ingresar? (y/n)"<<endl;              
  145.   cin>>fin;
  146.   }
  147.  
  148.  recorrer(arbol);
  149.  
  150. system("pause");


Muchas gracias a quien se tome el tiempo de copiarlo a un compilador y me pueda explicar!