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ó:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola User,<div><div class="h5"><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 class="HOEnZb"><font color="#888888"><br>
<br>
Steven</font></span><div class="HOEnZb"><div class="h5"><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><br>