红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【CS61B】Lec27 Tries

Lec27 Tries

假设我们有一个string类型的集合,我们可以构建一个特殊的数据结构Trie来高效存储与查找这些数据

结构特征

Trie树将每个字符串的每个字母存储到每一个节点中,单词沿着从根向下的路径存储

如下图存储了单词sad与sam

trie

对于如何判定是一个单词,我们可以通过标记节点来获得节点结尾的位置,以判定遍历到了一整个单词

trie2

寻找特定单词

从根节点向下寻找:

  • 若找不到特定单词节点,则无法找到特定单词
  • 若找到了特定单词节点但并非标记的结尾节点,也无法找到特定单词
search

其他特殊用处

匹配前缀

得到所有含有指定前缀的单词

  • 首先找到指定前缀的最后一个字母的节点位置
  • 遍历该节点的下一个节点,调用函数将下一个节点的字母添加到当前前缀之后并继续遍历
  • 若到达结尾则加入结果列表