Dudas con los arboles binarios
Bueno, tengo un problemilla, el caso es que me interesa copiar un árbol binario pero no me sale, a ver si alguien me podría echar un cable, aqui os adjunto la estructura de la clase, y la funcion miembro que tengo de momento:
template <class T>
class arbin
{
public:
arbin ();
arbin (const T & a, const arbin <T> &arb_izq = arbin (), const arbin < T > &arb_der = arbin ());
/* No conviene implementar el destructor, porque al construirse el arbol utilizando
* otros objetos "externos" del mismo tipo, se destruirian tambien.
* Se proporciona una funcion vaciar que el programador puede usar "manualmente"
* cuando este seguro de querer destruir todos los objetos enlazados.
*/
void Vaciar ();
arbin < T > Izquierdo ()const;
arbin < T > Derecho ()const;
const T & DatoRaiz () const;
T & DatoRaiz ();
bool EsVacio () const;
bool EsHoja () const;
void inOrden() const;
void Copiar (const arbin<T> &);
arbin<T> & operator = (const arbin<T> &);
int Altura () const;
int NumNodos (int = 0) const;
private:
class nodo
{
public:
T info;
arbin <T> izq;
arbin <T> der;
nodo (const T & e = T (), const arbin < T > &nizq = arbin (), const arbin < T > &nder = arbin ()):
info (e), izq (nizq), der (nder)
{
}
};
typedef nodo *nodoptr;
nodoptr raiz;
};
Y aqui teneis la función:
// Copia de árboles
template <class T>
void arbin<T>::Copiar (const arbin<T> & origen)
{
if (!origen.EsVacio())
{
//this = new arbin<T> (origen.DatoRaiz(), Copiar(origen.Izquierdo()), Copiar(origen.Derecho()));
this = new arbin<T>(origen.DatoRaiz());
Copiar(origen.Izquierdo());
Copiar(origen.Derecho());
}
}
He probado con todo, pero no hay manera, que ne mo sale...
Gracias!
template <class T>
class arbin
{
public:
arbin ();
arbin (const T & a, const arbin <T> &arb_izq = arbin (), const arbin < T > &arb_der = arbin ());
/* No conviene implementar el destructor, porque al construirse el arbol utilizando
* otros objetos "externos" del mismo tipo, se destruirian tambien.
* Se proporciona una funcion vaciar que el programador puede usar "manualmente"
* cuando este seguro de querer destruir todos los objetos enlazados.
*/
void Vaciar ();
arbin < T > Izquierdo ()const;
arbin < T > Derecho ()const;
const T & DatoRaiz () const;
T & DatoRaiz ();
bool EsVacio () const;
bool EsHoja () const;
void inOrden() const;
void Copiar (const arbin<T> &);
arbin<T> & operator = (const arbin<T> &);
int Altura () const;
int NumNodos (int = 0) const;
private:
class nodo
{
public:
T info;
arbin <T> izq;
arbin <T> der;
nodo (const T & e = T (), const arbin < T > &nizq = arbin (), const arbin < T > &nder = arbin ()):
info (e), izq (nizq), der (nder)
{
}
};
typedef nodo *nodoptr;
nodoptr raiz;
};
Y aqui teneis la función:
// Copia de árboles
template <class T>
void arbin<T>::Copiar (const arbin<T> & origen)
{
if (!origen.EsVacio())
{
//this = new arbin<T> (origen.DatoRaiz(), Copiar(origen.Izquierdo()), Copiar(origen.Derecho()));
this = new arbin<T>(origen.DatoRaiz());
Copiar(origen.Izquierdo());
Copiar(origen.Derecho());
}
}
He probado con todo, pero no hay manera, que ne mo sale...
Gracias!