树中带有yield return元素顺序的递归

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递归调用,但忽略其返回值.