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

Crear Arbol binario de forma recursiva a partir de un vector en preorden

Estas en el tema de Crear Arbol binario de forma recursiva a partir de un vector en preorden en el foro de C/C++ en Foros del Web. Muy buenas!! LLevo 4 dias dandome cabezazos y no consigo sacarlo. Tengo un vector de Tinfo(bool tipo y string texto), los datos los tiene guardados ...
  #1 (permalink)  
Antiguo 28/05/2010, 14:50
 
Fecha de Ingreso: abril-2005
Mensajes: 151
Antigüedad: 19 años
Puntos: 1
De acuerdo Crear Arbol binario de forma recursiva a partir de un vector en preorden

Muy buenas!!
LLevo 4 dias dandome cabezazos y no consigo sacarlo.
Tengo un vector de Tinfo(bool tipo y string texto), los datos los tiene guardados en preorden.
Tengo que crear un arbol binario de forma recursiva con ese vector, y no hay manera de crearlo. La idea la tengo sobre el papel, pero no consigo hacerlo en codigo.
Esta es la funcion que tengo:

template <class T>
void CrearArbol(arbin<T> &a, Tinfo* &v, int n, int x){
if(x >= n)
return;

else
{
arbin<T> ab(v[x]);

if(x == 0)
{
a.Copiar(ab);
CrearArbol(ab,v,n,++x);
}

if(v[x-1].tipo == 1)
return;
else
{
a.Izquierdo().Copiar(ab);
CrearArbol(a,v,n,++x);
a.Derecho().Copiar(ab);
CrearArbol(a,v,n,++x);
}
}
}

Y las funciones que utiliza son de una clase Arbin<T>, y son las siguientes:

template <class T>
void arbin<T>::Copiar(const arbin<T> & origen){

if(!origen.Esvacio()){
raiz = new nodo(origen.raiz->info);

Izquierdo().Copiar(origen.raiz->izq);
Derecho().Copiar(origen.raiz->der);
}
}


template <class T>
arbin<T> & arbin<T>::Izquierdo() {
return raiz->izq;
}

template <class T>
arbin<T> & arbin<T>::Derecho() {
return raiz->der;
}
  #2 (permalink)  
Antiguo 02/06/2010, 14:04
 
Fecha de Ingreso: abril-2005
Mensajes: 151
Antigüedad: 19 años
Puntos: 1
Respuesta: Crear Arbol binario de forma recursiva a partir de un vector en preorden

Hola de nuevo!!
Gracias a todos los que habeis leido el post.
Finalmente he conseguido dar con el eslabon perdido.
Os pego y explico lo que pasaba por si puede ayudar a alguien en unfuturo.

template <class T>
arbin<T> CrearArbol(arbin<T> &a, Tinfo* v, int n, int &x){

if(x < n)
{
arbin<T> a(v[x]);
if(v[x].tipo == 0)
{
a.Izquierdo() = CrearArbol(a, v ,n ,++x);
a.Derecho() = CrearArbol(a, v, n, ++x);
}
return a;
}
}


Lo importante era pasar la x por referencia, ya que izquierdo y derecho la incrementan, pero individualmente. Volvia hacia atras cada vez que se llamaba a CrearArbol desde derecho. Creo que no me he explicado muy bien...pero la funcion va muy muy bien.

Saludos!!

Etiquetas: binario, partir, arboles, vectores, formulario
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 07:11.