Implemente un procedimiento llamado recorrer que se supone atraviesa todo el arbol y (por los momentos) me imprime el valor de los nodos, aqui esta el codigo del template:
Código C++:
Ver original
// Definiciones para arboles! template <typename clase> class hoja { public: clase *contenido; //Hijos hoja <clase> *left; hoja <clase> *right; //Metodos constructores hoja () { left= NULL; right= NULL; contenido= NULL; } hoja (clase nuevo) { left= NULL; right= NULL; contenido= new clase; *contenido= nuevo; } //Metodos set void setContenido (clase nuevo) { contenido= new clase; *contenido= nuevo; } void setLeft (hoja <clase> *n) { left = n; } void setRight (hoja <clase> *n) { right= n; } //Metodos get hoja *getLeft () { return left; } hoja *getRight () { return right; } clase *getData () { return *contenido; } //Operaciones bool eshoja () { return (left==NULL && right==NULL); } int gradonodo () { int grado=0; if (left!=NULL) grado++; if (right!=NULL) grado++; return grado; } }; template <typename clase> class ArbinB { public: hoja <clase> *ABB; hoja <clase> *posicion; ArbinB () { ABB= NULL; posicion= ABB; } //Operaciones int insertar (clase e) { hoja <clase> *act; hoja <clase> *padre; bool encontrado; act= ABB; padre= NULL; encontrado= false; while (!encontrado && act!=NULL) { padre= act; if (e.clave<act->contenido->clave) act= act->left; else if (e.clave>act->contenido->clave) act= act->right; else encontrado= true; } if (encontrado) return -1; else { hoja <clase> *aux= new hoja <clase> (e); if (padre==NULL) ABB=aux; else { if (e.clave<padre->contenido->clave) padre->left= aux; else padre->right=aux; } return 1; } } }; //Operaciones template <typename clase> void recorrer (hoja <clase> ABB, int recorrido) //Donde recorrido= 0: simetrico, -1: preorden, 1: postorden { hoja <clase> *aux; aux= ABB; if (aux!=NULL) { switch (recorrido) { case -1: //visitar(); recorrer (aux->left, -1); recorrer (aux->right, -1); break; case 0: recorrer (aux->left, 0); //visitar(); recorrer (aux->right, 0); break; case 1: recorrer (aux->left, 1); recorrer (aux->right, 1); //visitar(); break; } } };
Y obtengo un error de compilacion en el testing.cpp en la linea recorrer (Arbol, 0) ;
Aqui el codigo del testing.cpp:
Código C++:
Ver original
#include <stdlib.h> #include <stdio.h> #include "node_dealing.h" using namespace std; class contenido { public: int clave; contenido () { clave=0; } }; int main () { ArbinB <contenido> Arbol; contenido c; int k=0; c.clave= 5; k= Arbol.insertar (c); c.clave= 7; k= Arbol.insertar (c); c.clave= 3; k= Arbol.insertar (c); c.clave= 9; k= Arbol.insertar (c); //printf ("\n%d", Arbol.ABB->contenido->clave); //printf ("\n%d", Arbol.ABB->right->contenido->clave); recorrer (Arbol, 0) ; //Donde recorrido= 0: simetrico, -1: preorden, 1: postorden }
Alguien tiene alguna idea de porque no se encuentra la funcion recorrer si esta esta declarada en el template y el mismo lo incluyo exitosamente (ya que como ven el resto de operaciones si funciona)
Gracias!