public void Traverse(NTree <T> node, TreeVisitor <T> visitor)
 {
     visitor(node.data);
     foreach (NTree <T> kid in node.children)
     {
         Traverse(kid, visitor);
     }
 }
 public NTree(T data, NTree <T> parent = null)
 {
     this.data   = data;
     children    = new LinkedList <NTree <T> >();
     this.parent = parent;
 }