public String toStringMulti(int lvl, HashSet<Integer> brkPts, int countall) { String a = ""; if (sf != null) { // we do not want to print the root node for (int i = 0; i < lvl; i++) { if (brkPts.contains(i)) { a += GREEN() + "|" + NC(); } else a += " "; } String ch = "\\"; if (children.size() > 1) { ch = "X"; brkPts.add(lvl); } if (children.size() == 0) { ch = "V"; } String bb = String.format("[%d/%d]", count, countall); a = String.format("%6.2f%%%10s", 100f * (float) count / countall, bb) + a + GREEN() + ch + NC() + " " + sf; a += "\n"; } int t = 0; for (SFNode n : children.values()) { if (t == children.size() - 1) { brkPts.remove(lvl); } t++; a += n.toStringMulti(lvl + 1, brkPts, countall); } return a; }