recorrer arbol

21/09/2006 - 12:52 por Hugo Gsell | Informe spam
Tengo una listra doblemente encadenada implementada en un vector.
Cada elemento del vector tiene la siguiente estructura
Miestructura
dato1

datoN
anterior as integer
siguiente() as integer
Finmiestructura
Con las siguientes condiciones:
*)cada elemento del vector tiene un único predecesor
*)el o los elementos iniciales tiene como anterior -1
*)cada elemento tiene uno o mas sucesores
*)el elemento final de cada 'rama' tiene como sucesor(x)=-1

Anterior en un numero entero que indica la pocision del nodo anterior.
Siguiente es un arreglo... donde cada elemento del vector indica la posicion
del elemento siguiente dentro del vector.
Todo esto es claramente una estructura de arbol ahora... cuando necesite
"graficar" en principio al menos solamente enumerando los datos que me
interesa de cada elemento(nodo).
La cosa es que quise implementar algun procedimiento recursivo o algo así
para recorrerlo...
y ya me maree tanto que ahora ya no lo puedo recorre ni a mano
o sea, ¿algun procedimiento (algoritmo) para recorrerlo?


Hugo Gsell
Sgo del Estero
Argentina
 

Leer las respuestas

#1 floyd303
21/09/2006 - 13:50 | Informe spam
Hola

A ver si te puedo contestar esta vez ayudandote
La funcion que buscas es algo asi... Lo que pasa es que no entiendo muy
bien tu estructura:
La siguiente funcion muestra un arbol de tu estructura por consola.
Supongo que los valores anterior y siguiente, de tipo int... te
permiten referenciar a una estructura MiEstructura determinada. Me
refiero a que tendras una funcion como la siguiente:

MiEstructura ObtenerEstructura (int id)

Entonces, para mostrar toda la estructura:

void MostrarEstructura(int raiz, int idABuscar)
{
// Ver si el valor es un nodo final
if (raiz == -1)
return;

// Mostrar los datos del nodo
Console.WriteLine ( string.Format ("Nodo con ID: {0}", raiz ) );

// Recorrer los hijos
MiEstructura objEst = ObtenerEstructura(raiz);
foreach(int id in objEst.siguiente)
{
// Realizar la busqueda sobre cada hijo
MostrarEstructura(id, idABuscar);
}
}

Esta funcion muestra por consola la ramificacion de tu estructura
completamente.
Evidentemente tienes que saber a que id se corresponde la estructura
raiz de todo el arbol.

Espero que te ayude

Un saludo
Roberto M. Oliva


Hugo Gsell ha escrito:

Tengo una listra doblemente encadenada implementada en un vector.
Cada elemento del vector tiene la siguiente estructura
Miestructura
dato1

datoN
anterior as integer
siguiente() as integer
Finmiestructura
Con las siguientes condiciones:
*)cada elemento del vector tiene un único predecesor
*)el o los elementos iniciales tiene como anterior -1
*)cada elemento tiene uno o mas sucesores
*)el elemento final de cada 'rama' tiene como sucesor(x)=-1

Anterior en un numero entero que indica la pocision del nodo anterior.
Siguiente es un arreglo... donde cada elemento del vector indica la posicion
del elemento siguiente dentro del vector.
Todo esto es claramente una estructura de arbol ahora... cuando necesite
"graficar" en principio al menos solamente enumerando los datos que me
interesa de cada elemento(nodo).
La cosa es que quise implementar algun procedimiento recursivo o algo así
para recorrerlo...
y ya me maree tanto que ahora ya no lo puedo recorre ni a mano
o sea, ¿algun procedimiento (algoritmo) para recorrerlo?


Hugo Gsell
Sgo del Estero
Argentina

Preguntas similares