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;
}
}