代码与动画 TRIE
字典树.
复用字符串的公共前缀,用词尾标记区分完整单词。
操作 O(L)空间与字符总数相关演示最多 15 个节点
原理与执行逻辑
字典树按字符逐层组织路径,共同前缀共享节点。节点是否标记为词尾,决定这条路径是否对应一个完整单词。
执行步骤
- 插入时从根依次读取字符,缺少孩子就创建节点。
- 到达最后一个字符后设置词尾标记。
- 查完整单词需路径存在且末尾有标记,查前缀只需路径存在。
- 删除时先取消词尾标记,再从后向前裁剪没有孩子且不代表其他单词的节点。
关键理解
路径存在与单词存在是两种条件。共享前缀不能随某个单词一起删除,裁剪必须保留仍被其他单词使用的节点。
简短示例
插入 CAT 与 CAR 后,两词共享 C、A;查询 CA 是有效前缀,但没有词尾标记所以不是完整单词。
代码与执行动画
STEP 0 / 0const root = { children: {}, terminal: false };// 初始单词:CAT、CAR、DOG8 个节点3 个单词
当前数据正在操作已访问 / 命中标记 / 指针
输出 / 辅助状态
单词:CAR, CAT, DOG
0
当前结构
选择操作,观察对应代码和状态变化。
操作当前结构
操作结果会用于下一次操作;重置结构恢复初始数据。
字典树的操作规则
字符限定为英文字母,统一转为大写,每个单词最多 4 个字符。粉色词尾标记表示完整单词;删除时只裁剪未共享的空分支。
对应题目与扩展练习
观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。
直接对应插入、完整单词查询与前缀查询。