/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

arboles binarios

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Mishy



Registrado: 21 Jul 2006
Mensajes: 14

MensajePublicado: 12/09/2006 7:10 pm
Título: arboles binarios

hola amigos quisiera ver si alguien me puede ayudar con los metodos de insertar, borrar y buscar en un arbol binario les estare muy agradecida
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 13/09/2006 6:34 am
Título:

Son temas muy amplios, creo que deberias leerte algun tutotial de EDD (estructuras de datos) y hacer preguntas un poco mas concretas. Depende de como has creado tu nodo y el tipo de recorrido que quieres para tu arbol (que puede ser preorden, post orden e inorden).
Volver arriba
Mishy



Registrado: 21 Jul 2006
Mensajes: 14

MensajePublicado: 17/09/2006 7:53 am
Título:

con lo de la clase nodo lo tengo asi
Código:
template<class T>
class Nodo
{
public:
   Nodo();
   T dato;               //Es la informacion del Nodo
   Nodo<T> *Der;      //Puntero hacia el siguiente nodo
   Nodo<T> *Izq;      //Puntero hacia el nodo anterior
   ~Nodo();
};

//===============================Constructor===================================================
//***Constructor del nodo
template <class T>
   Nodo<T>::Nodo()
   {}
//===============================Destructor===================================================
//***Destructor del nodo
template <class T>
   Nodo <T>::~Nodo()
   {}


y ahora lo del tipo de recorrido me sirven los 3 pero aun tengo dudas, se que los metodos son de manera recursiva pero aun no tengo claro como se hace para que vaya recorriendo cada rama y con lo de la impresion tengo esta idea

Código:

void inorden(XX a)
{
  if (a != NULL) {
    inorden(a->izq);
    cout << a->dato;
    inorden(a->der);
  }
}

el problema es que no se que tipo de parametro debo mandarle como estoy trabajando con templates no se si sera T info o algo asi?? o es un puntero??? gracias x su ayuda
Volver arriba
Requiem



Registrado: 11 Abr 2006
Mensajes: 689

MensajePublicado: 17/09/2006 8:54 am
Título:

Hola...
Igual estoy metiendo mucho la pata.. pero cuando programo arboles binarios le pongo un tercer puntero a padre..... (NULL en caso de ser raiz)...
En muchas ocasiones te interesara volver atras(hacia arriba en el arbol jerarquico)...
Bueno, pues eso... no se me ocurre nada mas, acabo de levantarme de la siesta Smile
Vaya bien
Requiem
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 17/09/2006 11:26 am
Título:

Cita:

Igual estoy metiendo mucho la pata.. pero cuando programo arboles binarios le pongo un tercer puntero a padre..... (NULL en caso de ser raiz)...

Bueno, no necesariamente. Existen un monton de truquitos para optimizar. En general, con guardar en caulquier sitio el puntero a la raiz hay suficiente. En realidad no hace falta nada de esto.

Seria algo asi
Código:

template <class T>
   Nodo<T>::Inorden(T a)
   {
       if (a != NULL) {
          inorden(a->izq);
          cout << a->dato;
          inorden(a->der);
       }
   }
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 17/09/2006 12:18 pm
Título:

No quiero ser impertinente pero:
Código:

template <class T>
   Nodo<T>::Inorden(T a)
   {
       if (a != NULL) {
          inorden(a->izq);
          cout << a->dato;
          inorden(a->der);
       }
   }


a deberia ser un puntero de tipo T y aún siendolo nada asegura que el tipo contenga los atributos que se aplican en el codigo.

Si usas template, es posible que neceistes declarar una clase arbol contenedora parametrizada, con uno de los atributos de tipo <T> este a su vez con los atributos autoreferenciadores y datos que tuviese cada nodo.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 18/09/2006 1:39 am
Título:

Po zi, tienes razon (en lo del puntero, me refiero Smile )
Volver arriba
Mishy



Registrado: 21 Jul 2006
Mensajes: 14

MensajePublicado: 21/09/2006 5:31 pm
Título:

Bueno queria agradecerles por su grata ayuda me ha sido util, ahora tengo la duda de como hacer para contar el numero de hojas y de nodos totales de mi arbol, con los nodos estaba pensando en utilizar el metodo postorden ya que aca recorro todo el arbol y hacer un contador que vaya incrementando osea algo asi:
Código:
template <class T>
int ArbolBinario<T>::NumeroNodos(Nodo<T> *NodoNum)
{
   if (IsEmpty()==true)                  //Verifica si esta vacio el arbol
      cout<<"\n\t\tEl Arbol se encuentra vacio.\n\n";
   else
   {
                int contador;
      if (NodoNum->Izq!=NULL){
         PrintPostOrden(NodoNum->Izq);
          contador++;}
      if (NodoNum->Der!=NULL){
         PrintPostOrden(NodoNum->Der){
          contador++;}
        return contador;
   }
}


ahora con lo de contar las hojas no se muy bien solo se q tendria q recorrer el arbol y buscar los nodos que tengan sus punteros derecha e izquierda Null, pero no se muy bien, espero su ayuda y gracias x adelantado
Volver arriba
bobyjoe



Registrado: 19 Sep 2006
Mensajes: 10

MensajePublicado: 21/09/2006 6:53 pm
Título: mmmmmmmmmm

yo tengo una funcion que sirve para contar hojas haber si te sirve y si algo no le entiendes me preguntas

void ArbolABB::contarhojas(void (*func)(int&), Nodo *nodo, bool r)
{
if(r) nodo = raiz;
if(nodo->izquierdo) PostOrden(func, nodo->izquierdo, false);
if(nodo->derecho) PostOrden(func, nodo->derecho, false);


if((!nodo->izquierdo) && (!nodo->derecho)){
numhojas++;
vector[numhojas]=nodo->dato;
}

func(nodo->dato);
}
Volver arriba
Mishy



Registrado: 21 Jul 2006
Mensajes: 14

MensajePublicado: 23/09/2006 8:58 pm
Título: Duda del metodo insertar

Bueno estaba viendo que el metodo insertar puede hacerse ya sea Void o tipo Nodo, me podrian explicar xq seria tipo nodo, es decir, de que me sirve retornar un nodo?? no seria mas facil hacer un tipo Void??? gracias!
Volver arriba
dakoz147



Registrado: 02 Dic 2007
Mensajes: 1
Ubicación: Medellin

MensajePublicado: 02/12/2007 4:04 pm
Título: Arbol binario

No se q hacer con estas dos funciones q no pertenecen a la clase arbolbinario... si pueden colaborarme por favor:

1. Dados los recorridos en POSORDEN y en INORDEN de un árbol binario por medio de una lista L, esta función recibe la lista y retorna el árbol original.

2. Dados los recorridos en PREORDEN y en INORDEN de un árbol binario por medio de una lista L, esta función recibe la lista y retorna el árbol original.

Gracias si pueden ayudarme para antes del 7 de diciembre de este año.

Daniel Ortiz
Volver arriba
Solenbum



Registrado: 29 Nov 2007
Mensajes: 7

MensajePublicado: 04/12/2007 11:41 am
Título:

teoria arboles binarios:
http://www.conclase.net/c/edd/index.php?cap=007


ejemplo en c:


ejemplo en c++:



codigo fuente al final de esta web:
http://www.conclase.net/c/edd/index.php?cap=900
_________________
peepaaa
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com