【问题标题】:Why method does not traverse entire tree为什么方法不遍历整个树
【发布时间】:2013-04-21 01:39:14
【问题描述】:

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

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

【问题讨论】:

标签: c# linq recursion tree ienumerable


【解决方案1】:

可以改写为:

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

【讨论】:

  • 是的,使用原始的 TraverseTree,它没有分配返回值。
猜你喜欢
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2021-01-12
相关资源
最近更新 更多