Kor*_*tak 9 c# tree recursion yield-return postorder
我有一个递归函数,在给定起始根节点的情况下返回所有子树节点.
private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
foreach (Node node in subnode.Nodes)
getAllNodesRecursively(node);
yield return subnode;
}
Run Code Online (Sandbox Code Playgroud)
对于以下树结构:
A
|
+--B
|
+--C
| |
| +--D
|
+--E
Run Code Online (Sandbox Code Playgroud)
当我尝试迭代时:
foreach (Node n in getAllNodesRecursively(a))
{
Console.WriteLine(n);
}
Run Code Online (Sandbox Code Playgroud)
该函数返回唯一的A值.
我希望使用yield-return和递归,并检索Preorder中的元素(在本例中为A,B,C,D,E).
(如果我把收益率的回报放在foreach之前,那么foreach永远不会发生).
这可能吗?
Joe*_*Joe 16
你尝试过类似的东西:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的实现是getAllNodesRecursively递归调用,但忽略其返回值.