Una struttura dati ad albero visualizzata in HTML
Ora un’altra piccola classe per generare un albero di test.
Qui potete sbizzarrirvi quanto volete nella creazione dell’albero. C’è giusto un esempio.
package com.danidemi.tree;
public class TreeBuilder {
public Node build() {
Node root = null;
root = new Node(\"ENT_1\");
root.find(\"ENT_1\").addChild(new Node(\"ENT_1_2\"));
root.find(\"ENT_1\").addChild(new Node(\"ENT_1_3\"));
root.find(\"ENT_1\").addChild(new Node(\"ENT_1_4\"));
root.find(\"ENT_1_2\").addChild(new Node(\"ENT_1_2_1\"));
root.find(\"ENT_1_2\").addChild(new Node(\"ENT_1_2_2\"));
return root;
}
}
Ed infine una classe per la rappresentazione dell’albero sottoforma di stringa.
Più o meno l’idea è quella di scorrere tutti i nodi dalla radice alle foglie utilizzando un approccio depth first.
Per ogni nodo si genera la corrispondente riga.
L’esempio scrive su console ma un estensione ad HTML non dovrebbe essere nulla di complicato.
package com.danidemi.tree;
public class TreeRender {
private String renderRow(Node n){
String result = \"\";
int distanceFromRoot = n.distanceFromRoot();
Node ancestor = n;
for(int k = 0; k<distancefromroot ; k++){
String structure = \"\";
if(k==0){
String picture = \"\";
if(ancestor.isLastChild()){
picture = \"\\\";
}else{
picture = \"+\";
}
structure = picture;
structure = structure + \"-\";
}else{
if(ancestor.isLastChild()){
structure = \" \";
}else{
structure = \"|\";
}
structure = structure + \" \";
}
result = structure + result;
ancestor = ancestor.getParent();
}
result += n.getLabel();
return result;
}
public String renderTree(Node n){
String result = \"\";
Node[] childs = n.getChilds();
for(int i=0; i<childs .length; i++){
result += renderTree(childs[i]);
}
return renderRow(n) + \"\n\" + result;
}
public static void main(String[] a){
Node root = new TreeBuilder().build();
System.out.println(new TreeRender().renderTree(root));
}
}