为什么方法不遍历整个树

时间:2013-04-26 19:33:34

标签: c# linq recursion tree ienumerable

我的方法如下:

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

1 个答案:

答案 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;
    }