我的方法如下:
public IEnumerable<Node> TraverseTree(Node root)
{
if(root.Children != null)
{
foreach(var item in root.Children)
TraverseTree(item);
}
yield return root;
}
当我这样做时:
var allItems = TraverseTree(someRootNode).ToList();
我只获得第一个节点。使用IEnumerable时是否无法使用递归?如果我可以使用IEnumerable以便我的linq查询不能完全执行,那将是很好的。
抱歉我的Node类看起来像:
class Node
{
public Node Val;
public List<Node> Children = new List<Node>();
}
答案 0 :(得分:2)
可以改写为:
public IEnumerable<Node> TraverseTree(Node root)
{
if (root.Children != null)
{
foreach (var child in root.Children)
{
var nodes = TraverseTree(child);
foreach (var node in nodes)
{
yield return node;
}
}
}
yield return root;
}