我有一个从该类创建的树。
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)