1

我有一个看起来像这样的方法:

    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>();
}
4

1 回答 1

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;
    }
于 2013-04-26T19:46:37.557 回答