Ukkonen の線形時間での接尾辞木構築アルゴリズムの実装

データ構造は
http://www.dogma.net/markn/articles/suffixt/stree.cpp
を参考にした。
ノードと枝ラベルの先頭文字から、枝を引くことができる連想配列

初期化:1文字の接尾辞木
根と、1つのノード、それらの間の枝。
根のsuffix linkは自分自身に。葉はnull。

1文字追加
前回、追加されずに枝の途中で終わった新規ノード(implicit nodeとして作られたノード)
と同じ開始インデックスの接尾辞から追加する。
(それ以前のは、葉ノードをともなう追加で、内部ノードが追加された場合でもsuffix linkが付けられている)
最初は、根からたどる。
ノードからたどれる枝がなかった場合、新しく葉ノードと枝を作り、分岐させる。
ノードからたどれる枝の途中の位置で、追加したい接尾辞が終わっていた場合、なにもしない。
追加したい接尾辞