The
Java TreeLayout described below creates tree layouts for arbitrary trees. It is not
restricted to a specific output or format, but can be used for any kind
of two dimensional diagram. Examples are Swing based components, SVG
files, and many more. This is possible because TreeLayout separates the
layout of a tree from the actual rendering.

To use the TreeLayout
you mainly need to supply an instance of the TreeLayout class with the
nodes of the tree (including "children" links), together with the "size"
of each node. In addition you can configure the layout by specifying
parameters like "gap between levels" etc..

Based on this information TreeLayout creates a compact, nice looking layout. The layout has the following properties [2]:

The layout displays the hierarchical structure of the tree, i.e. the y-coordinate of a node is given by its level.

The edges do not cross each other and nodes on the same level have a minimal horizontal distance.

The
drawing of a subtree does not depend on its position in the tree, i.e.
isomorphic subtrees are drawn identically up to translation.

The order of the children of a node is displayed in the drawing.

The algorithm works symmetrically, i.e. the drawing of the reflection of a tree is the reflected drawing of the original tree.

Download and Installation

org.abego.treelayout.netbeans.jar: use the TreeLayout algorithm for the NetBeans Visual Library API (GraphLayout, ...). (When
using this JAR make sure the NetBeans libraries
'org.netbeans.api.visual', 'org.openide.util', and
'org.openide.util.lookup' are in the classpath.)

NetBeans and abego TreeLayout

The
NetBeans Visual Library API already includes an algorithm to lay out trees (and
graphs in general). However, the default implementation of the NetBeans Visual Library does
not always generate layouts as compact as the abego TreeLayout
implementation:

Layout using abego TreeLayout

Layout using NetBeans' default Tree GraphLayout

Both
screenshots are taken from the demo application in the
"org.abego.treelayout.netbeans.demo" project, also provided in the
sources. The demo project includes the "org.abego.treelayout.netbeans"
library to easily access the abego TreeLayout algorithm from standard
NetBeans visual code.

As the following comparision shows using
the abego TreeLayout in NetBeans visual code is as simple as using the
standard GraphLayout:

Documentation

For detailed documentation see the javaDoc in the source code and this pdf document.

In addition you may also find the example code helpful. It is included in the "demo" packages.

Algorithm Performance

Based on Walker's algorithm [1] with enhancements suggested by Buchheim, Jünger, and Leipert [2]
the software builds tree layouts in linear time. I.e. even trees with
many nodes are built fast. Other than with the Reingold–Tilford
algorithm [3] one is not limited to binary trees.

In a
benchmark the algorithm could layout trees with a speed of approx. 5
micro seconds per node. (Running on a 2.4 GHz Intel Core 2 Duo machine).