我有一个递归函数,在给定起始根节点的情况下返回所有子树节点。
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与递归结合使用并检索预购中的元素(本例中为A、B、C、D、E)。
(如果我将收益返回放在 foreach 之前,则 foreach 将永远不会发生)。
这可能吗?
你有没有尝试过类似的事情:
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;
}
}
}
您的实施正在调用getAllNodesRecursively
递归地执行,但忽略其返回值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)