Tema: Arbol c++
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2010, 13:11
terrodar
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
Arbol c++

tengo una consulta necesito crear un algortimo para un arbol AVL que me imprima todo el camino izquierdo partiendo desde la hoja de esta manera



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);
};