private String subtreeAsText(PopsIONode node, String s, Stack<Integer> x, int depth, String b) { Integer[] y = x.toArray(new Integer[x.size()]); StringBuffer indent = new StringBuffer(); for (int i = 0; i < depth; i++) { indent.append(" "); } for (int i = 0; i < y.length; i++) { indent.replace(2 * y[i], 2 * y[i] + 1, "|"); } if (b.length() > 0) { indent.replace(indent.length() - b.length(), indent.length(), b); } s += indent; s += node.asText(indent.length()); s += System.getProperty("line.separator"); String subs = ""; if (node.lft >= 0) { x.push(depth); subs += subtreeAsText(pionodes[node.lft], "", x, depth + 1, "-"); x.pop(); subs += subtreeAsText(pionodes[node.rgt], "", x, depth + 1, "`-"); } return s + subs; }