Estoy intentando descubrir cómo implementar una función en un nodo de árbol que devuelve todas sus hojas descendientes (ya sean directas o indirectas). Sin embargo, no quiero pasar un contenedor en el que los nodos hoja se colocarán de forma recursiva (el árbol podría ser enorme), en cambio me gustaría utilizar un generador para iterar a través del árbol. He intentado algunos enfoques, pero ninguno de ellos funcionó hasta ahora. Este es el más cercano que he llegado a una posible solución:¿Cómo iterar a través de una estructura de árbol usando un generador?
public interface ITreeNode
{
IEnumerable<ITreeNode> EnumerateLeaves();
}
class Leaf : ITreeNode
{
public IEnumerable<ITreeNode> EnumerateLeaves()
{
throw new NotImplementedException();
}
}
class Branch : ITreeNode
{
private List<ITreeNode> m_treeNodes = new List<ITreeNode>();
public IEnumerable<ITreeNode> EnumerateLeaves()
{
foreach(var node in m_treeNodes)
{
if(node is Leaf)
yield return node;
else
node.EnumerateLeaves();
}
}
}
Pero esto tampoco está funcionando. ¿Qué estoy haciendo mal? Parece que llamar .EnumerateLeaves recursivamente no funcionará si hay una declaración de rendimiento en la misma función.
Cualquier ayuda sería muy apreciada. Gracias por adelantado.
Editar: Olvidé mencionar que una rama puede tener hojas o ramas como niños, de ahí la recursión.
No es ésta una pregunta .NET? –
Sí - retenido. La etiqueta 'Programación' es redundante en un sitio de programación. =) –