import com.google.common.collect.Lists; import java.util.ArrayList; public class DFSTreeBuilder { private int label; private ArrayList<DFSTree> children = Lists.newArrayList(); public DFSTreeBuilder() { } public static DFSTreeBuilder aTreeBuilder() { return new DFSTreeBuilder(); } public DFSTreeBuilder withChild(DFSTreeBuilder destination) { children.add(destination.build()); return this; } public DFSTreeBuilder withLabel(int label) { this.label = label; return this; } public DFSTree build() { DFSTree dfsTree = new DFSTree(label); for (DFSTree child : children) { dfsTree.edge(child); } return dfsTree; } }