Flatten

なんとなく one liner

public static IEnumerable<T> Flatten<T>(T root, Func<T, IEnumerable<T>> childrenSelector) {
    return Enumerable.Repeat(root, 1).Concat(childrenSelector(root).SelectMany(x => Flatten(x, childrenSelector)));
}

Action<T> をとる DoRecursive を最初に作っておいたけど、汎用的に。