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.