Java - Buscar en Nodos

 
Vista:

Buscar en Nodos

Publicado por Mayk (4 intervenciones) el 01/07/2005 08:06:32
Saludos una duda para los que peudan ayudarme, COmo puedo Buscar RECURSIVAMENTE entre estos nodos ( VER IMAGEN POR FAVOR)
[ http://img293.imageshack.us/img293/5314/buscar9ji.jpg ]

por ejemplo encontrar a gonzalo y retornar aquel NODO, GRACIAS PARA LOS Q PUEDAN COOPERAR O SOLUCIONAR MI PROBLEMILLA =)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Buscar en Nodos

Publicado por J Hilario (54 intervenciones) el 01/07/2005 21:03:34
Hola Mayk, pues puedo darte una idea espero te ayude...
La estructura de datos que se te presenta es lo que llaman una lista de listas, aqunque también puedes ver que es similar al árbol binario. el tipo de búsqueda para un elemento puede ser con lo que llaman algoritmos de fuerza bruta, que recorren todos las opciones gastando todas las alternativas hasta llegar al resultado.
Cada nodo tiene la forma de lo que en C dan en llamar una estructura autoreferenciada, esto es, cada nodo contiene al menos un 'apuntador' (referencia de objeto en este caso) a una estreuctura similar, por ejemplo

class Persona {
public String nombre;
public Persona nodosiguiente;
}

Cada nodo (instancia) de persona tendrá su propio elemento nombre y una refernecia a otra instacia igual, pero con un nombre quizá diferente. Una función recursiva implica que se busca en un nodo actual, el nombre deseado, y si no se encuentra este se busca en las sublistas pasando los nodos siguientes, que en este caso llamaremos nodoDerecha (sublista derecha, hermanos o subarbol derecho) y nodoAbajo (sublista de abajo, hijos o subarbol izquierdo). La función buscarPersona trata de ejemplificarlo, es solo una idea, no la he probado pero la expongo recordando algunos otros programas similares

class Persona {

public String nombre;

public Persona nodoDerecha; // sublista de la derecha
public Persona nodoAbajo; // sublista hacia abajo

public Persona buscarPersona(Persona nodoActual, String personaBuscada)
{
/* Si el nodo actual contiene el nombre deseado regresarlo y salir,
* no es necesario continuar la búsqueda
*/
if (nodoActual.nombre.equals(personaBuscada))
return nodoActual;

Persona nodoAuxiliar = null;
/* Continuar buscando en la lista izquierda si esta existe */
if (nodoActual.nodoDerecha != null)
nodoAuxiliar = buscarPersona(nodoActual.nodoDerecha, personaBuscada);

/* Si no se encontró en la lista derecha... */
if (nodoAuxiliar == null)
/* ...buscar en la lista de abajo */
if (nodoActual.nodoAbajo != null)
nodoAuxiliar = buscarPersona(nodoActual.nodoAbajo, personaBuscada);

// Devolver el nodo encontrado o nulo
return nodoAuxiliar;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar en Nodos

Publicado por Mayk (4 intervenciones) el 02/07/2005 05:21:21
Gracias HIlario!! te pasaste socio me sirvio de arto tu ayuda, disculpa pero aprovechando tu sapiencia, si cada persona tuviese una edad, los nodosderecha son hermanos y nodosabajo son hijos, como podria saber que nodoPersona tiene mayor descendencia??? ojala puedas aportarme alguna idea yo todavia pienso pero como es RECURSIVO se me hace complicado, vuelvo a darte las gracias de antemano. Espero que cualkier otra persona me pueda ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar en Nodos

Publicado por J Hilario (54 intervenciones) el 05/07/2005 01:08:05
Pues para lo de la edad solo agregas un campo entero y lo inicializas en donde inicialize el nombre. Lo de mayor descendencia no se si te refieras a mayor numero de nodos hijo en total o solo los que sería algo así como sus descendientes directos (hijo, nieto, bisnieto). En el código anterior por supuesto falta validar más aquello de los nulos, pero como te decía, es una idea de +- como se hacen esas búsquedas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar