Hola, tengo un proyecto para una practica de la universidad de manejar arboles. LA cuestion es la siguiente: cuando intento mostrar el arbol por pantalla sobrecargué los dos operadores de salida como sigue 
ostream & operator << (ostream & os, const nTreeLNode<int> * t)
{
        os << t;
    return os;
}
 
ostream & operator << (ostream & os, const nTreeLNode<int> & t)
{
    if (t.isLeaf(t.root())) // El arbol solo es un nodo raiz
    {
        os << "Arbol (" << t.label(t.root()) << ")";
        return os;
    }
    
    LNode<int> * hijo = t.leftMostChild (t.root());
    os << " Arbol (" << t.label(t.root());
    while (hijo)
    {
        os << ", " << t.subTree(hijo);
        hijo = t.rightSibling (hijo);
    }
    os << ")";
    return os;
}
 
La cuestion es que cuando imprimo por pantalla, me salen direcciones de memoria y no el árbol. Además, yo lo había hecho de esta forma (modificacion en la 
linea 3):
ostream & operator << (ostream & os, const nTreeLNode<int> * t)
{
        os << *t;
    return os;
}
 
ostream & operator << (ostream & os, const nTreeLNode<int> & t)
{
    if (t.isLeaf(t.root())) // El arbol solo es un nodo raiz
    {
        os << "Arbol (" << t.label(t.root()) << ")";
        return os;
    }
    
    LNode<int> * hijo = t.leftMostChild (t.root());
    os << " Arbol (" << t.label(t.root());
    while (hijo)
    {
        os << ", " << t.subTree(hijo);
        hijo = t.rightSibling (hijo);
    }
    os << ")";
    return os;
}
 
 
Pero poniendo el * delante del arbol 
linea 3 no me compila mostrandome un error de candidatos o no seq. La verdad es que estoy algo bloqueao. Me podeis echar una mano? Si necesitais ver código de algun archivo o algo decirlo.
Muchas gracias