【发布时间】:2012-02-25 22:54:10
【问题描述】:
我有一个递归函数,它返回所有子树节点,给定起始根节点。
private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
foreach (Node node in subnode.Nodes)
getAllNodesRecursively(node);
yield return subnode;
}
对于以下树结构:
A
|
+--B
|
+--C
| |
| +--D
|
+--E
当我尝试这样迭代时:
foreach (Node n in getAllNodesRecursively(a))
{
Console.WriteLine(n);
}
函数返回唯一的 A 值。
我希望使用带有递归的 yield-return 并检索 Preorder 中的元素(本例中为 A、B、C、D、E)。
(如果我把收益回报放在 foreach 之前,foreach 永远不会发生)。
这可能吗?
【问题讨论】:
-
如果你把yield return放在前面,你有没有试过不调用foreach?我猜它会被调用。
-
是的,你是对的。收益返回不会跳过其余代码。似乎它只是允许返回值并保持函数运行的语法糖。我的错。
标签: c# recursion tree yield-return postorder