### Question:
TreeIteratorFactoryImpl implements TreeIteratorFactory { @Override public <E, N extends OpenNode<E, N>, T extends Tree<E, N>> Iterator<N> breadthFirstIterator(T tree) { final IteratorRemoveHandler<E, N, T> handler = iteratorRemoveHandlerProvider.get(tree); return new BreadthFirstIterator<>(tree, handler); } TreeIteratorFactoryImpl(IteratorRemoveHandlerProvider iteratorRemoveHandlerProvider); @Override Iterator<N> preOrderIterator(T tree); @Override Iterator<N> inOrderIterator(T tree); @Override Iterator<N> postOrderIterator(T tree); @Override Iterator<N> breadthFirstIterator(T tree); @Override Iterator<E> preOrderElementsIterator(Tree<E, N> tree); @Override Iterator<E> inOrderElementsIterator(Tree<E, N> tree); @Override Iterator<E> postOrderElementsIterator(Tree<E, N> tree); @Override Iterator<E> breadthFirstElementsIterator(Tree<E, N> tree);  }### Answer:
@Test public void breadthFirstIterator() { final Iterator<? extends MutableSettableStructuredNode<String>> iterator = iteratorFactory.breadthFirstIterator(tree); assertEquals("root", iterator.next().getElement()); assertEquals("a", iterator.next().getElement()); assertEquals("b", iterator.next().getElement()); assertEquals("c", iterator.next().getElement()); }