`libstree` is a **generic** suffix tree implementation, written
in C. It can handle arbitrary data structures as elements of a string. It is
therefore not limited to simple ASCII character strings, like most demo implementations
of suffix algorithms are.

Suffix tree generation in `libstree` is highly efficient and implemented using
the algorithm by Ukkonen, which means that
`libstree` builds suffix trees in time linear to the length of the strings
(assuming that string element comparisons can be done in O(1)).

`libstree` can handle multiple strings per suffix tree, including dynamic insertion
and removal of strings. It provides various means of obtaining information about
nodes in the tree, such as depth-first and breadth-first iteration, leaves iteration,
and bottom-up iteration.

`libstree` provides implementations of longest-common-substring and longest-repeated-substring
algorithms, as examples of how to build complex algorithms using the suffix tree
primitives.