Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Arbol c++

Estas en el tema de Arbol c++ en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/11/2010, 13:11
 
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);
};
  #2 (permalink)  
Antiguo 01/11/2010, 15:55
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Arbol c++

Imprime la informacion el nodo y llama recursivamente solo para la rama izquierda
  #3 (permalink)  
Antiguo 01/11/2010, 16:18
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Arbol c++

supongo que tengo un puntero al objeto AVL llamado arbol.

Código C++:
Ver original
  1. Nodo * temp = arbol->raiz;
  2. while (temp != NULL)
  3. {
  4.          //imprimis datos LUCHADOR, desconosco el tipo ese.
  5.          temp =temp->izq;
  6. }

Y listo!
  #4 (permalink)  
Antiguo 01/11/2010, 18:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Arbol c++

muchas gracias

Etiquetas: arboles
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:25.