Created
July 23, 2018 13:50
-
-
Save ufo2mstar/a2438ecc43bec19f67b108c576174521 to your computer and use it in GitHub Desktop.
Display tree from nodes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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