@Override public ImmutableBinaryTree decompose(ArrayList<Vertex<Integer>> vertices) { Split split = createSplit(0, this, vertices); ArrayList<Vertex<Integer>> ordering = new ArrayList<>(); while (!split.done()) { split = split.decomposeAdvance(); ordering.add(split.getLastMoved()); } // System.out.printf("ordering: %s\n", Util.labels(ordering)); int i = 0; for (Vertex<Integer> v : ordering) { VertexLabel.setOrder(v, Integer.toString(i)); i += 1; } return getCaterpillarIBTFromOrdering(ordering); }