public void levelOrder( Method visit )
   {
      ArrayQueue<BinaryTreeNode<T>> q = new ArrayQueue<>( );
      BinaryTreeNode<T> t = root;
      while( t != null )
      {
         try
         {
            visit.invoke( null, t ); // visit tree root
         }
         catch ( Exception e )
         {
            System.out.println( e );
         }

         // put t's children on queue
         if( t.leftChild != null )
            q.put( t.leftChild );
         if( t.rightChild != null )
            q.put( t.rightChild );

         // get next node to visit
         t = ( BinaryTreeNode<T> ) q.remove( );
      }
   }