| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Mishy
Registrado: 21 Jul 2006 Mensajes: 14
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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  Vaya bien Requiem |
|
| Volver arriba | |
 |
Killrazor
Registrado: 24 Ene 2006 Mensajes: 1182 Ubicación: Barcelona
| Publicado: 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
| Publicado: 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
| Publicado: 18/09/2006 1:39 am | | | Título: |
| Po zi, tienes razon (en lo del puntero, me refiero ) |
|
| Volver arriba | |
 |
Mishy
Registrado: 21 Jul 2006 Mensajes: 14
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| |
| Volver arriba | |
 |
|
|