I have a recursive function that returns all subtree nodes, given the starting root node.
private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
foreach (Node node in subnode.Nodes)
getAllNodesRecursively(node);
yield return subnode;
}
For the following tree structure:
A
|
+--B
|
+--C
| |
| +--D
|
+--E
When I try to iterate as such:
foreach (Node n in getAllNodesRecursively(a))
{
Console.WriteLine(n);
}
the function returns the only the A value.
I wish to use yield-return with recursion and retrieve elements in the Preorder (A, B, C, D, E in this example).
(If I put the yield return before the foreach, the foreach would never happen).
Is this possible?
Have you tried something like:
private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
// Return the parent before its children
yield return subnode;
foreach (Node node in subnode.Nodes)
{
foreach(Node n in getAllNodesRecursively(node))
{
yield return n;
}
}
}
Your implementation is calling getAllNodesRecursively
recursively, but ignoring its return value.
Yes it's possible, just put the yield return
before the foreach
. You are thinking of the behaviour of a normal return
statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With