### Question:
Converter implements TreeConverter<E, MutableSettableNode<E>, MutableTreeImpl<E>> { @Override public final <S extends OpenNode<E, S>> MutableTreeImpl<E> build(Tree<E, S> sourceTree) { final S root = sourceTree.getRoot(); return duplicate(root.getElement(), root.childIterator(), root.getNumberOfChildren()); }  @Override final MutableTreeImpl<E> build(Tree<E, S> sourceTree); @Override Class<? extends Tree> forClass();  }### Answer:
@Test public void convert() { final Converter<String> converter = new Converter<>(); final MutableTreeImpl<String> mutableTree = converter.build(tree); assertEquals("a", mutableTree.getRoot().getElement()); final Iterator<MutableSettableNode<String>> rootChildIterator = mutableTree.getRoot().childIterator(); assertEquals("b", rootChildIterator.next().getElement()); final MutableSettableNode<String> child = rootChildIterator.next(); assertFalse(rootChildIterator.hasNext()); assertEquals("c", child.getElement()); final Iterator<? extends MutableSettableNode<String>> childChildIterator = child.childIterator(); assertEquals("d", childChildIterator.next().getElement()); assertFalse(childChildIterator.hasNext()); }