Tengo una función recursiva que devuelve todos los nodos de subárbol, dado el nodo raíz de inicio.Recursión con orden de elementos de retorno de rendimiento en el árbol
private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
foreach (Node node in subnode.Nodes)
getAllNodesRecursively(node);
yield return subnode;
}
Para la siguiente estructura:
A
|
+--B
|
+--C
| |
| +--D
|
+--E
Cuando trato de repetir como tal:
foreach (Node n in getAllNodesRecursively(a))
{
Console.WriteLine(n);
}
la función devuelve el único el valor A.
Deseo usar yield-return con recursión y recuperar elementos en el Preorder (A, B, C, D, E en este ejemplo).
(Si pongo el rendimiento antes del foreach, el foreach nunca sucedería).
¿Esto es posible?
¿Has intentado que no se llame al foreach si pones el retorno de rendimiento al frente? Supongo que se llamará. – okrumnow
Sí, tenías razón. El rendimiento obtenido no omite el resto del código. Parece que es solo un azúcar sintáctico para permitir el retorno del valor y aún así mantener la función en funcionamiento. Mi error. –