So I have simple tree:
class MyNode
{
public MyNode Parent;
public IEnumerable Elements;
int group = 1;
}
I have a I
Here some ready to use implementation using Queue and returning the Flatten tree me first and then my children.
public static IEnumerable Flatten(this IEnumerable items,
Func> getChildren)
{
if (items == null)
yield break;
var queue = new Queue();
foreach (var item in items) {
if (item == null)
continue;
queue.Enqueue(item);
while (queue.Count > 0) {
var current = queue.Dequeue();
yield return current;
if (current == null)
continue;
var children = getChildren(current);
if (children == null)
continue;
foreach (var child in children)
queue.Enqueue(child);
}
}
}