import java.util.ArrayList;
class NodeSystem {
public static class Node
{
public ArrayList<Node> nodes = new ArrayList<Node>();//child nodes of this node
//if nodes == it's leaves
//propetries
public String name;
public Node(String name) {
this.name = name;
}
public void addChild(Node n)
{
this.nodes.add(n);
}
}
public abstract static class TreeRunner
{
public abstract void nodeHandle(Node n);
public void recursiveRead(Node node)
{
nodeHandle(node);
if(node.nodes != null){
for(Node childNode:node.nodes){
recursiveRead(childNode);
}
}
}
}
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//::::::::::::::::::::F:O:R::T:E:S:T:::::::::::::::::::::::::::::
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
private static class MyTreeRunner extends TreeRunner
{
public static int TAB = 0;
@Override
public void nodeHandle(Node n) {
System.out.println(getTab()+n.name);
}
private String getTab()
{
String result = "";
for(int i = 0;i<TAB;i++)
{
result+=" ";
}
return result;
}
public void recursiveRead(Node n)
{
TAB++;
super.recursiveRead(n);
TAB--;
}
}
public static void main(String[] args)
{
System.out.println("::TEST::");
Node root = new Node("ROOT");
Node element1 = new Node("Child_Of_Root");
Node element2 = new Node("First_Child_Of_element1");
Node element3 = new Node("Second_Child_Of_element1");
Node element4 = new Node("First_Child_Of_element2");
element2.addChild(element4);
element1.addChild(element2);
element1.addChild(element3);
root.addChild(element1);
MyTreeRunner ntr = new MyTreeRunner();
ntr.recursiveRead(root);
//now we have tree:
/*
ROOT[1]
\
/ Child_Of_Root[2]
/ \
First_Child_Of_element1[3] \
/ Second_Child_Of_element1[5]
First_Child_Of_element2[4]
*/
}
}