递归与产量的回报元素树订购 [英] Recursion with yield return elements order in tree
本文介绍了递归与产量的回报元素树订购的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个递归函数返回所有子树节点,给出的起始根节点
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);
}
函数返回只有一个值。
the function returns the only the A value.
我希望用收益回报的递归,并在预购检索元素(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).
(如果我把之前的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.
这篇关于递归与产量的回报元素树订购的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文