尽管可以在此处使用递归方法,但是可以使用显式堆栈遍历此树结构,以避免使用堆栈空间,这对于大型树结构而言并不总是足够的。这种方法作为迭代器块也非常好,并且递归时,迭代器块比常规方法便宜得多,因此它的性能也更好:
public static IEnumerable<T> Traverse<T>(this IEnumerable<T> items, Func<T, IEnumerable<T>> childSelector){ var stack = new Stack<T>(items); while(stack.Any()) { var next = stack.Pop(); yield return next; foreach(var child in childSelector(next)) stack.Push(child); }}


