我无法理解该树是如何从给定的输入字符串生成的。
您实际上创建了一个包含您列出的所有后缀的 patricia trie。插入 patricia trie 时,您从输入字符串中的第一个字符开始搜索根以查找子节点,如果存在,则继续沿树向下,如果不存在,则从根中创建一个新节点。根的子节点与输入字符串中的唯一字符($、a、e、h、i、n、r、s、t、w)一样多。您可以对输入字符串中的每个字符继续该过程。
后缀树用于在给定字符串中查找给定子字符串,但给定树如何帮助实现这一点?
如果您正在寻找子字符串“hen”,则从根开始搜索以“h”开头的子字符串。如果子“h”中字符串的长度,则继续处理子“h”,直到到达字符串的末尾,或者输入字符串和子“h”字符串中的字符不匹配。如果匹配所有子“h”,即输入“hen”匹配子“h”中的“he”,然后继续搜索“h”的子元素,直到找到“n”,如果它未能找到开始的子元素使用“n”则子字符串不存在。
紧凑后缀特里代码:
└── (black)
├── (white) as
├── (white) e
│ ├── (white) eir
│ ├── (white) en
│ └── (white) ere
├── (white) he
│ ├── (white) heir
│ ├── (white) hen
│ └── (white) here
├── (white) ir
├── (white) n
├── (white) r
│ └── (white) re
├── (white) s
├── (white) the
│ ├── (white) their
│ └── (white) there
└── (black) w
├── (white) was
└── (white) when
后缀树代码:
String = the$their$there$was$when$
End of word character = $
└── (0)
├── (22) $
├── (25) as$
├── (9) e
│ ├── (10) ir$
│ ├── (32) n$
│ └── (17) re$
├── (7) he
│ ├── (2) $
│ ├── (8) ir$
│ ├── (31) n$
│ └── (16) re$
├── (11) ir$
├── (33) n$
├── (18) r
│ ├── (12) $
│ └── (19) e$
├── (26) s$
├── (5) the
│ ├── (1) $
│ ├── (6) ir$
│ └── (15) re$
└── (29) w
├── (24) as$
└── (30) hen$