el camino rojo partiendo desde la hoja es lo que necesito imprimir.
la firma del arbol con sus nodos es esta
Código:
class AVL; // Clase Nodo de Arbol AVL: class Nodo { public: // Constructor: Nodo(Luchador dat, Nodo *pad=NULL, Nodo *izq=NULL, Nodo *der=NULL) : dato(dat), padre(pad), izquierdo(izq), derecho(der), FE(0) {} // Miembros: Luchador dato; int FE; Nodo *izquierdo; Nodo *derecho; Nodo *padre; friend class AVL; }; class AVL { private: enum {IZQUIERDO, DERECHO}; // Punteros de la lista, para cabeza y nodo actual: Nodo *raiz; Nodo *actual; int contador; int altura; public: // Constructor y destructor básicos: AVL() : raiz(NULL), actual(NULL) {} ~AVL() { Podar(raiz); } void muestracamino(); // Insertar en árbol ordenado: void Insertar(const Luchador dat); // Borrar un elemento del árbol: void Borrar(const Luchador dat); // Función de búsqueda: bool Buscar(const Luchador dat); // Comprobar si el árbol está vacío: bool Vacio(Nodo *r) { return r==NULL; } // Comprobar si es un nodo hoja: bool EsHoja(Nodo *r) { return !r->derecho && !r->izquierdo; } // Contar número de nodos: const int NumeroNodos(); const int AlturaArbol(); // Calcular altura de un dato: int Altura(const Luchador dat); // Devolver referencia al dato del nodo actual: Luchador &ValorActual() { return actual->dato; } // Moverse al nodo raiz: void Raiz() { actual = raiz; } // Aplicar una función a cada elemento del árbol: void InOrden(void (*func)(Luchador&, int) , Nodo *nodo=NULL, bool r=true); void PreOrden(void (*func)(Luchador&, int) , Nodo *nodo=NULL, bool r=true); void PostOrden(void (*func)(Luchador&, int) , Nodo *nodo=NULL, bool r=true); private: // Funciones de equilibrado: void Equilibrar(Nodo *nodo, int, bool); void RSI(Nodo* nodo); void RSD(Nodo* nodo); void RDI(Nodo* nodo); void RDD(Nodo* nodo); // Funciones auxiliares void Podar(Nodo* &); void auxContador(Nodo*); void auxAltura(Nodo*, int); };