public List <Tree <T> > Traverse(Tree <T> root, TRAVERSAL direction) { List <Tree <T> > result = new List <Tree <T> >(); RecursiveTraverse(ref result, root, direction); return(result); }
private void RecursiveTraverse(ref List <Tree <T> > result, Tree <T> trunk, TRAVERSAL direction) { if (direction == TRAVERSAL.TOPDOWN) { result.Add(trunk); } foreach (Tree <T> t in trunk.Children) { RecursiveTraverse(ref result, t, direction); } if (direction == TRAVERSAL.BOTTOMUP) { result.Add(trunk); } }