Ver Mensaje Individual
  #12 (permalink)  
Antiguo 24/11/2014, 01:43
Avatar de Profesor_Falken
Profesor_Falken
 
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Duda al definir un árbol n-ario

Buenas,

Es compilador tiene razon al quejarse, ya que cuando haces la llamada recursiva no haces retorno.

En realidad hay dos errores en dicho for:
-No haces retorno de un nodo en la llamada recursiva
-Cuando recorres lo haces sobre los hijos de la instancia cuando en realidad deberias hacerlos sobre el nodo pasado por parametro.

for(int i=0;i<r.hijos.size();i++)
{
return buscarNodo(r.hijos.get(i),v);
}

Otra forma mas sencilla de hacer el bucle seria:

Código Java:
Ver original
  1. for(final nodoN nodoHijo : r.hijos) {
  2.     return buscarNodo(nodoHijo ,v);
  3. }

Por otro lado, este metodo de busqueda es stateless y no depende del estado de una instancia, por lo que lo mas adecuado es que lo hagas static.
En resumen, tu codigo quedaria mas o menos asi:


Código Java:
Ver original
  1. public static nodoN buscarNodo(nodoN r, int v)
  2.     {
  3.         if(r==null)
  4.         {
  5.             System.out.println("no hay nodo para buscar");
  6.             return null;
  7.         }
  8.        
  9.         else
  10.         {
  11.             if(r.valor==v)
  12.             {
  13.                 return r;
  14.             }
  15.            
  16.             else
  17.             {
  18.                 for(final nodoN nodoHijo : r.hijos) {
  19.                       return buscarNodo(nodoHijo ,v);
  20.                }          
  21.             }
  22.         }
  23.     }

Y cuando quieras llamarlo lo puedes hacer asi

Código Java:
Ver original
  1. nodoN nodoEncontado = nodoN.buscarNodo(raiz, 8);

Un saludo
__________________
If to err is human, then programmers are the most human of us