2011-12-23 13 views
9

Quiero buscar un elemento en un árbol no binario (cualquier nodo puede tener n - hijos) y salir de la recursión inmediatamente. El nodo en cuestión puede ser cualquier nodo, no solo hojas.Búsqueda recursiva de un nodo en un árbol no binario

Este es mi código pero no obtengo una búsqueda completa.

private nNode recursiveSearch(data gi,nNode node){ 
     if (node.getdata()==gi) 
      return node; 
     nNode[] children = node.getChildren(); 
     if (children.length>0) 
     for (int i = 0; i < children.length; i++) {   
      return recursiveSearch(gi, children[i]); 
     } 
     return null; 
} 

nNode contiene:

ArrayList mChildren ; (it) de los niños objeto
y datos.

+0

lo que hace su 'nNode' parece? – fge

Respuesta

23

No debe salir después de explorar el primer niño. No necesita la instrucción if al frente del bucle for.

private nNode recursiveSearch(data gi,nNode node){ 
    if (node.getdata()==gi) 
     return node; 
    nNode[] children = node.getChildren(); 
    nNode res = null; 
    for (int i = 0; res == null && i < children.length; i++) {   
     res = recursiveSearch(gi, children[i]); 
    } 
    return res; 
} 
5

En su código si recursiveSearch (gi, niños [i]) devuelve un valor nulo a continuación, i + 1 no buscado, modificar:

private nNode recursiveSearch(data gi,nNode node){ 
     if (node.getdata()==gi) 
      return node; 
     nNode[] children = node.getChildren(); 
     nNode temp; 
     if (children.length>0) 
     for (int i = 0; i < children.length; i++) {   
      temp = recursiveSearch(gi, children[i]); 
      if(temp!=null) 
       return temp; 
     } 
     return null; 
} 
Cuestiones relacionadas