1. ホーム
  2. c#

[解決済み] LINQを使った木の検索

2023-04-01 18:32:38

質問

このクラスから作成されたツリーがあります。

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

すべての子とその子で検索して、条件に合うものを取得したいのですが。

node.Key == SomeSpecialKey

どのように実装すればいいのでしょうか?

どのように解決するのですか?

再帰処理が必要だというのは誤解です。それは はスタックかキューを必要とし、最も簡単な方法は再帰を使用して実装することです。完全性を期すために、私は非再帰的な答えを提供します。

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)