学习首页/数据结构/字典树交互演示 · JavaScript

代码与动画 TRIE

字典树.

复用字符串的公共前缀,用词尾标记区分完整单词。

操作 O(L)空间与字符总数相关演示最多 15 个节点

原理与执行逻辑

字典树按字符逐层组织路径,共同前缀共享节点。节点是否标记为词尾,决定这条路径是否对应一个完整单词。

执行步骤

  1. 插入时从根依次读取字符,缺少孩子就创建节点。
  2. 到达最后一个字符后设置词尾标记。
  3. 查完整单词需路径存在且末尾有标记,查前缀只需路径存在。
  4. 删除时先取消词尾标记,再从后向前裁剪没有孩子且不代表其他单词的节点。

关键理解

路径存在与单词存在是两种条件。共享前缀不能随某个单词一起删除,裁剪必须保留仍被其他单词使用的节点。

简短示例

插入 CAT 与 CAR 后,两词共享 C、A;查询 CA 是有效前缀,但没有词尾标记所以不是完整单词。

代码与执行动画

STEP 0 / 0
字典树
const root = { children: {}, terminal: false };// 初始单词:CAT、CAR、DOG
2 行 · 0 个片段标记
8 个节点3 个单词
R词尾T词尾ACG词尾OD∅root
当前数据正在操作已访问 / 命中标记 / 指针
输出 / 辅助状态
单词:CAR, CAT, DOG
0

当前结构

选择操作,观察对应代码和状态变化。

操作当前结构

操作结果会用于下一次操作;重置结构恢复初始数据。

实现说明

字典树的操作规则

字符限定为英文字母,统一转为大写,每个单词最多 4 个字符。粉色词尾标记表示完整单词;删除时只裁剪未共享的空分支。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。