private void rdepth(Graph<VLabel, ELabel> G,
            Stack<Graph<VLabel, ELabel>.Vertex> fringe) {
        if (fringe.isEmpty()) {
            return;
        }
        Graph<VLabel, ELabel>.Vertex curr = fringe.pop();
        try {
            if (marked.contains(curr)) {
                return;
            }
            marked.add(curr);
            try {
                _finalVertex = curr;
                visit(curr);
                _finalVertex = null;
            } catch (RejectException e) {
                return;
            }
            depthLook(G, curr, fringe);
            Iteration<Graph<VLabel, ELabel>.Edge> myEdges = G.outEdges(curr);
            while (myEdges.hasNext()) {
                myEdges.next();
                rdepth(G, fringe);
            }
        } catch (StopException e) {
            return;
        }
        try {
            _finalVertex = curr;
            postVisit(curr);
            _finalVertex = null;
        } catch (RejectException e) {
            return;
        }
    }