en este pequeño ejemplo, voy a implementar una forma simple de dibujar un Arbol Binario usando Graphviz y en especifico, Dot.
Como base para entender el funcionamiento general de Graphviz, hace tiempo hice un post hablando mas en detalle del proceso usando Java (Usar GraphViz en Java)
Para que este ejemplo funcione, es necesario tener instalado GraphViz con la carpeta "bin" de GraphViz como parte de la variable Path de Windows (esto para poder invocar Dot.exe usando solo el nombre del binario, el mismo caso que para los ejecutables Javac o Java en el Path)
Dicho ejemplo resulta muy conveniente, ya que con un par de ajustes mínimos, se presta para generar su representación en el formato de grafo que utiliza Dot para dibujar.
dichos ajustes son.
1) Agregar un ToString() a la clase del Nodo, para que cada Nodo pueda generar un String que lo represente, en este caso solo usando la propiedad Name.
publicclass TTreeNode {
publicstring name;publicdouble value;public TTreeNode left, right;// Constructor to create a single node public TTreeNode (string name,double d){this.name = name;
value = d;
left =null;
right =null;}publicoverridestring ToString(){returnstring.Format("\"{0}\"", name);}}
2) Exponer en el Arbol un metodo para acceder al Nodo Raiz de dicho Arbol.
publicclass TBinarySTree
{// Implements:// count()// clear()// insert()// delete()// findSymbol()//// Usage://// TBinarySTree bt = new TBinarySTree();// bt.insert ("Bill", "3.14");// bt.insert ("John". 2.71");// etc.// node = bt.findSymbol ("Bill");// WriteLine ("Node value = {0}\n", node.value);//private TTreeNode root;// Points to the root of the treeprivateint _count =0;public TTreeNode GetRoot(){return root;}
Luego un par de metodos para generar la representacion de cada nodo y sus relaciones en lenguaje para Dot
El programa que use para demostrar el ejemplo, Genera un grafo aleatorio con mas de 10 nodos, y luego genera un archivo txt en la carpeta de ejecucion con el codigo para Graphviz que representa al grafo, invoca a dot para generar una imagen JPG y abrirla luego con el visor predeterminado,