Skip to content

Instantly share code, notes, and snippets.

@ufo2mstar
Created July 23, 2018 13:50
Show Gist options
  • Save ufo2mstar/a2438ecc43bec19f67b108c576174521 to your computer and use it in GitHub Desktop.
Save ufo2mstar/a2438ecc43bec19f67b108c576174521 to your computer and use it in GitHub Desktop.
Display tree from nodes
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ModelTreeNode {
final String name;
final List<ModelTreeNode> children;
private int offset = 0;
public ModelTreeNode(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public ModelTreeNode(String name, List<ModelTreeNode> children) {
this.name = name;
this.children = children;
}
public ModelTreeNode(String name, int offset) {
this.name = name;
this.offset = offset;
this.children = new ArrayList<>();
}
// public String showTree() {
// StringBuilder treeStr = new StringBuilder();
// return showTree(treeStr, true).toString();
// }
//
// public String stringTile() {
// String s = "────";
// int n = this.offset;
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < n; i++) {
// sb.append(s);
// }
// return sb.toString();
// }
//
// private StringBuilder showTree(StringBuilder prefix, boolean isTail) {
//// System.out.println(prefix + (isTail ? "└── " : "├── ") + name);
// StringBuilder thisprefix = prefix.append((isTail ? "└" : "├") + stringTile() + "── " + name + "\n");
// for (int i = 0; i < children.size() - 1; i++) {
// children.get(i).showTree(thisprefix.append((isTail ? " " : "│") + " "), false);
// }
// if (children.size() > 0) {
// children.get(children.size() - 1).showTree(thisprefix.append((isTail ? " " : "│") + " "), true);
// }
// return thisprefix;
// }
public String showTree() {
StringBuilder treeStr = new StringBuilder();
print("", true, treeStr);
return treeStr.toString();
}
private void print(String prefix, boolean isTail, StringBuilder treeStr) {
treeStr.append(prefix + (isTail ? TreeLink.tailStr : TreeLink.forkStr) + name + "\n");
for (int i = 0; i < children.size() - 1; i++) {
children.get(i).print(prefix + (isTail ? TreeLink.indent : TreeLink.padStr), false, treeStr);
}
if (children.size() > 0) {
children.get(children.size() - 1)
.print(prefix + (isTail ? TreeLink.indent : TreeLink.padStr), true, treeStr);
}
}
public static void main(String[] args) {
ModelTreeNode ta = new ModelTreeNode("a");
ModelTreeNode tb = new ModelTreeNode("b");
ModelTreeNode tc = new ModelTreeNode("c", Arrays.asList(ta, tb));
ModelTreeNode tasdf = new ModelTreeNode("asdf");
ModelTreeNode te = new ModelTreeNode("e", Arrays.asList(tasdf));
ModelTreeNode td = new ModelTreeNode("d");
ModelTreeNode tf = new ModelTreeNode("f");
ModelTreeNode tz = new ModelTreeNode("kod", Arrays.asList(tc, td, te, tf));
System.out.println(tz.showTree());
}
}
class TreeLink {
static String tailStr = "└── ";
static String forkStr = "├── ";
static String padStr = "│ ";
static String indent = " ";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment