前に言われたように、あなたの木は正しくありません。
これは、コードで「ABCDE$XABCZ」を実行したときに得られるものです。
接尾辞木コード:
String = ABCDE$XABCZ$
End of word character 1 = $
└── (0)
├── (20) $
├── (22) ABC
│ ├── (15) DE$
│ └── (23) Z$
├── (24) BC
│ ├── (16) DE$
│ └── (25) Z$
├── (26) C
│ ├── (17) DE$
│ └── (27) Z$
├── (18) DE$
├── (19) E$
├── (21) XABCZ$
└── (28) Z$
(コンパクトな)接尾辞ツリーで、すべての文字列からリーフノードを持つ最も深い内部ノードを見つける必要があります。同じ深さに複数のノードがある場合は、そのノードによって表される文字列の長さを比較する必要があります。つまり、ABC、BC、およびCはすべて同じ深さであるため、ABC、BC、およびCの文字列の長さを比較して、どちらが長いかを確認する必要があります。明らかにABCです。
サフィックストライコード:
└── null
├── A
│ └── B
│ └── C
│ ├── D
│ │ └── (E) ABCDE
│ └── (Z) ABCZ
├── B
│ └── C
│ ├── D
│ │ └── (E) BCDE
│ └── (Z) BCZ
├── C
│ ├── D
│ │ └── (E) CDE
│ └── (Z) CZ
├── D
│ └── (E) DE
├── (E) E
├── X
│ └── A
│ └── B
│ └── C
│ └── (Z) XABCZ
└── (Z) Z
(コンパクトではない)接尾辞トライで、すべての文字列からリーフノードを持つ最も深い内部ノードを見つけます。
それが役に立てば幸い。