package automenta.spacenet.var.graph.tree;
import automenta.spacenet.var.graph.MemGraph;
/**
* actually a ForestGraph as it can hold multiple tree roots
*/
public class TreeGraph extends MemGraph {
public static class ChildEdge {
@Override
public String toString() {
return "child";
}
}
public TreeGraph(TreeNode... roots) {
super();
for (TreeNode tn : roots) {
addTreeNode(tn);
}
}
public Object add(Object o) {
if (o instanceof TreeNode) {
return addTreeNode((TreeNode) o);
} else {
return addNode(o);
}
}
private Object addTreeNode(TreeNode tn) {
addNode(tn.value);
for (Object o : tn.children) {
Object child = add(o);
addEdge(new ChildEdge(), tn.value, child);
}
return tn.value;
}
}