[C con Clase] Método recursivo en árbol que retorna valor de verdad
User
usuarioanonimomysql en gmail.com
Mie Sep 12 08:21:19 CEST 2012
Gracias a los dos.
Steven, ¿podrías poner la implementación completa del método?
Muchas gracias.
El 11 de septiembre de 2012 18:36, Steven Davidson <srd4121 en njit.edu>escribió:
> Hola User,
>
>
> On 9/11/2012 11:32 AM, User wrote:
>
>> Hola,
>>
>> Estoy tratando de hacer un método recursivo que recorra un árbol y
>> retorne el valor de verdad 'true' si al menos hay un nodo en ese
>> árbol que tenga la propiedad azul (blue). No he sido capaz de hacerlo
>> de otra manera que no fuera utilizando un miembro de clase, el
>> m_hasBlue. Me gustaría poder implementar este método sin necesidad de
>> recurir a un miembro de clase. ¿Me echáis una mano?
>>
>> Este es mi código:
>>
>> bool myClass::existsBlue()
>> {
>> myClass *object = 0;
>> while(m_children.next())
>> {
>> object = m_children.first();
>> if (object && object->isBlue())
>> {
>> m_hasBlue = true;
>> break;
>> }
>> else
>> {
>> m_hasBlue = object->existsBlue();
>> }
>> }
>> return m_hasBlue;
>> }
>>
>>
> 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,
>
> bool myClass::existsBlue()
> {
> bool bEsAzul = false;
>
> myClass *object = 0;
> while( m_children.next() )
> ...
> }
>
> Aquí usaríamos 'bEsAzul' en lugar de 'm_hasBlue'.
>
> 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í,
>
> bool myClass::existsBlue()
> {
> bool bEsAzul = false;
>
> myClass *object = 0;
> while( !bEsAzul && m_children.next() )
> ...
> }
>
> que se leería: "mientras que no sea azul y el siguiente hijo exista, haz
> ...".
>
> 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.
>
> 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.
>
>
> Espero que esto te ayude.
>
> Steven
>
>
>
>
> ______________________________**_________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/**mailman/listinfo/cconclase_**
> listas.conclase.net<http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net>
> Bajas: http://listas.conclase.net/**index.php?gid=2&mnu=FAQ<http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120912/21bc8775/attachment-0001.html>
Más información sobre la lista de distribución Cconclase