在树中使用 yield 返回元素顺序的递归 [英] Recursion with yield return elements order in tree
本文介绍了在树中使用 yield 返回元素顺序的递归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个递归函数,它返回所有子树节点,给定起始根节点.
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;
}
对于以下树结构:
A
|
+--B
|
+--C
| |
| +--D
|
+--E
当我尝试这样迭代时:
foreach (Node n in getAllNodesRecursively(a))
{
Console.WriteLine(n);
}
该函数仅返回 A 值.
the function returns the only the A value.
我希望将 yield-return 与递归一起使用,并检索 Preorder 中的元素(在此示例中为 A、B、C、D、E).
I wish to use yield-return with recursion and retrieve elements in the Preorder (A, B, C, D, E in this example).
(如果我把 yield return 放在 foreach 之前,foreach 永远不会发生).
(If I put the yield return before the foreach, the foreach would never happen).
这可能吗?
推荐答案
您是否尝试过类似的方法:
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;
}
}
}
您的实现以递归方式调用 getAllNodesRecursively
,但忽略其返回值.
Your implementation is calling getAllNodesRecursively
recursively, but ignoring its return value.
这篇关于在树中使用 yield 返回元素顺序的递归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文