@Override
        public <N> Iterable<N> traverse(Graph<N> graph, N startNode) {
            Objects.requireNonNull(graph, "graph");
            Objects.requireNonNull(startNode, "startNode");
            return () -> new BreadthFirstIterator<>(graph, startNode);
        }
Traverses in breadth-first order.

<p>That is, all the nodes of depth 0 are returned, then depth 1, then 2, and so on.</p>

<p>See <a href="https://en.wikipedia.org/wiki/Breadth-first_search">Wikipedia</a> for more info.</p>
common/src/main/java/me/lucko/luckperms/common/graph/TraversalAlgorithm.java