code: public Tree<T> findPreOrderNext(){
          if( hasChildren() ){
              return getFirstChild();
          }
          if( hasNext() ){
              return getNext();
          }
          Tree<T> parent = getParent();
          while( parent != null ){
              if( parent.hasNext() ){
                  return parent.getNext();
              }
              parent = parent.getParent();
          }
          return null;
      }
docs: Iterates tree in pre-order (http://en.wikipedia.org/wiki/Tree_traversal)