一尘不染

使用LINQ搜索树

c#

我有一个从该类创建的树。

class Node
{
    public string Key { get; }
    public List<Node> Children { get; }
}

我想搜索所有孩子及其所有孩子,以找到符合条件的孩子:

node.Key == SomeSpecialKey

我该如何实施?


阅读 218

收藏
2020-05-19

共1个答案

一尘不染

这需要递归是一个误解。这 需要一个堆栈或队列和最简单的方法是使用递归来实现它。为了完整起见,我将提供一个非递归答案。

static IEnumerable<Node> Descendants(this Node root)
{
    var nodes = new Stack<Node>(new[] {root});
    while (nodes.Any())
    {
        Node node = nodes.Pop();
        yield return node;
        foreach (var n in node.Children) nodes.Push(n);
    }
}

例如,使用以下表达式来使用它:

root.Descendants().Where(node => node.Key == SomeSpecialKey)
2020-05-19