public void traverse(Graph<VLabel, ELabel> G,
                         Graph<VLabel, ELabel>.Vertex v,
                         Comparator<VLabel> order) {
        currTraversal = 0;
        stored = order;
        TreeSet<Graph<VLabel, ELabel>.Vertex> fringe =
                new TreeSet<Graph<VLabel, ELabel>.Vertex>(getComp(order));
        marked = new HashSet<Graph<VLabel, ELabel>.Vertex>();
        _finalVertex = null;
        _finalEdge = null;
        try {
            if (marked.contains(v)) {
                return;
            }
            marked.add(v);
            try {
                _finalVertex = v;
                visit(v);
                _finalVertex = null;
            } catch (RejectException e) {
                return;
            }
            look(G, v, fringe);
            while (!fringe.isEmpty()) {
                Graph<VLabel, ELabel>.Vertex curr = fringe.pollFirst();
                if (marked.contains(curr)) {
                    continue;
                }
                marked.add(curr);
                try {
                    _finalVertex = curr;
                    visit(curr);
                    _finalVertex = null;
                } catch (RejectException e) {
                    continue;
                }
                look(G, curr, fringe);
            }
        } catch (StopException e) {
            return;
        }
    }