using System.Collections.Generic;
static IEnumerable<Node> BFS(Node root)
using var enumerator = BFS(root).GetEnumerator();
foreach (var node in VisitLevel(root, enumerator, 1))
static IEnumerable<Node> VisitLevel(Node root, IEnumerator<Node> enumerator, int nodeCount)
for (; nodeCount > 0; nodeCount--)
foreach (var child in enumerator.Current.Children)
foreach (var node in VisitLevel(root, enumerator, childCount))
foreach (var node in BFS(tree))
Console.WriteLine(node.Value);
public Node(int value, params Node[] children)
public int Value { get; }
public Node[] Children { get; }