I have a Tree
class, defined as follows:
public class Tree<T> {
private T value;
protected List<Tree<T>> children = new ArrayList<Tree<T>>();
/* ... */
}
I want to implement the toString()
method in this class to show the String
representation of this Tree
, e.g.:
└── root
├── child1
│ └── grandchild1
└── child2
I implemented in this way:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
buildString(sb, "", true);
return sb.toString();
}
private void buildString(StringBuilder sb, String prefix, boolean isTail) {
sb.append(isTail ? "└── " : "├── ").append(value).append(System.lineSeparator());
prefix = prefix + (isTail ? " " : "│ ");
for (int i = 0; i < children.size() - 1; i++) {
sb.append(prefix);
children.get(i).buildString(sb, prefix, false);
}
if (children.size() >= 1) {
sb.append(prefix);
children.get(children.size() - 1).buildString(sb,prefix, true);
}
}
I am looking for possible improvements or suggestions.