<div dir="ltr">Hola,<div><br></div><div>Refloto este tema pues no me quedó claro en su día, ¿podrías hacer los cambios pertinentes a la función "<span style="font-family:arial,sans-serif;font-size:13px">bool myClass::existsBlue()</span>" para que pueda ver cómo queda?</div>
<div><br></div><div>Muchas gracias,</div><div><br></div><div>Saludos.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 12 de septiembre de 2012, 8:30, User <span dir="ltr"><<a href="mailto:usuarioanonimomysql@gmail.com" target="_blank">usuarioanonimomysql@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola Pedro,<br><br>En la implementación que has puesto veo un problema, si en el método no se ejecuta el bucle while porque no existe un siguiente hijo, entonces el valor de retorno no estará definido.<br>
<br>Saludos.<br><br>
<div class="gmail_quote">El 12 de septiembre de 2012 08:21, User <span dir="ltr"><<a href="mailto:usuarioanonimomysql@gmail.com" target="_blank">usuarioanonimomysql@gmail.com</a>></span> escribió:<div><div class="h5">
<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Gracias a los dos.<br><br>Steven, ¿podrías poner la implementación completa del método?<br><br>Muchas gracias.<br><br><div class="gmail_quote">El 11 de septiembre de 2012 18:36, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu" target="_blank">srd4121@njit.edu</a>></span> escribió:<div>

<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola User,<div><div><br>
<br>
On 9/11/2012 11:32 AM, User wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola,<br>
<br>
Estoy tratando de hacer un método recursivo que recorra un árbol y<br>
retorne el valor de verdad 'true' si al menos hay un nodo en ese<br>
árbol que tenga la propiedad azul (blue). No he sido capaz de hacerlo<br>
de otra manera que no fuera utilizando un miembro de clase, el<br>
m_hasBlue. Me gustaría poder implementar este método sin necesidad de<br>
recurir a un miembro de clase. ¿Me echáis una mano?<br>
<br>
Este es mi código:<br>
<br>
bool myClass::existsBlue()<br>
{<br>
   myClass *object = 0;<br>
   while(m_children.next())<br>
{<br>
object =  m_children.first();<br>
if (object && object->isBlue())<br>
{<br>
m_hasBlue = true;<br>
break;<br>
}<br>
else<br>
{<br>
m_hasBlue = object->existsBlue();<br>
}<br>
}<br>
return m_hasBlue;<br>
}<br>
<br>
</blockquote>
<br></div></div>
La verdad es que vas por buen camino. Si no quieres usar un dato miembro, entonces pásalo a este ámbito local de la función recursiva. Por ejemplo,<br>
<br>
bool myClass::existsBlue()<br>
{<br>
  bool bEsAzul = false;<br>
<br>
  myClass *object = 0;<br>
  while( m_children.next() )<br>
  ...<br>
}<br>
<br>
Aquí usaríamos 'bEsAzul' en lugar de 'm_hasBlue'.<br>
<br>
El único problema que veo es que no terminas el bucle 'while' en cuanto hayas encontrado "azul". Esto se puede corregir en la condición del bucle así,<br>
<br>
bool myClass::existsBlue()<br>
{<br>
  bool bEsAzul = false;<br>
<br>
  myClass *object = 0;<br>
  while( !bEsAzul && m_children.next() )<br>
  ...<br>
}<br>
<br>
que se leería: "mientras que no sea azul y el siguiente hijo exista, haz ...".<br>
<br>
Podríamos optimizar un poco más el código eliminando el uso de 'break', que no lo recomiendo para salir de los bucles. De hecho, podemos eliminar el uso de 'bEsAzul' y retornar de inmediato en cuanto sepamos si es azul o no.<br>



<br>
Otra alternativa es tratando la información en el árbol como una lista (o array), para recorrerla linealmente en busca de "azul". El recorrido puede ser iterativa o recursiva.<br>
<br>
<br>
Espero que esto te ayude.<span><font color="#888888"><br>
<br>
Steven</font></span><div><div><br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/<u></u>mailman/listinfo/cconclase_<u></u>listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/<u></u>index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div></div></div><br>
</blockquote></div></div></div><br>
</blockquote></div><br></div>