Algorithme pour afficher un arbre
2013-08-16
Voici un algorithme pour afficher un joli arbre à la manière de la commande tree.
private void print(Writer out, String prefix, List<Object> items) throws IOException {
int j;
for (j=items.size()-1; j>=0; j--) {
Object o = items.get(j);
if (! (o instanceof List))
break;
}
for (int i=0; i<items.size(); i++) {
Object o = items.get(i);
boolean isTail = (i >= j) || (i == items.size() - 1);
if (! (o instanceof List)) {
out.write(prefix + (isTail ? "└── " : "├── ") + String.valueOf(o) + "\n");
} else {
print(out, prefix + (isTail ? " " : "│ "), (List<Object>) o);
}
}
}
@Test
public void testFoo() throws IOException {
PrintWriter pw = new PrintWriter(System.out);
print(pw, "", Arrays.asList("a", "b", Arrays.asList("c", "d", Arrays.asList("e", "g")), "h"));
pw.flush();
fail();
}
Ce qui donne :
├── a
├── b
│ ├── c
│ └── d
│ ├── e
│ └── g
└── h