Trie tree 解题模板
什么是 Trie 树?
Trie 树(发音”try”),又称前缀树或字典树,是一种树形数据结构,用于高效存储和检索字符串数据集中的键。
典型应用场景:
- 自动补全(搜索框)
- 拼写检查
- IP 路由(最长前缀匹配)
- 单词搜索游戏
- 字符串前缀/后缀查询
时间复杂度:
- 插入: O(m) - m 是字符串长度
- 查找: O(m)
- 前缀搜索: O(m)
优势:
- 查找效率高于哈希表(处理前缀)
- 不存在哈希冲突
- 可以按字典序遍历
模板 (Python)
模板 1: 标准 Trie 树实现
1 | class TrieNode: |
模板 2: 紧凑版 Trie
1 | class Trie: |
模板 3: 带通配符的 Trie (支持’.’)
1 | class WordDictionary: |
LeetCode 经典题目与模板应用
题目 1: [208] Implement Trie (Prefix Tree)
难度: Medium
题意: 实现 Trie 的基本操作
解答: 使用标准模板即可
1 | class Trie: |
题目 2: [211] Design Add and Search Words Data Structure
难度: Medium
题意: 支持’.’通配符的单词搜索
关键点:
- ‘.’需要递归搜索所有可能的子节点
- 使用 DFS 遍历
解答: 使用模板 3
1 | class WordDictionary: |
题目 3: [212] Word Search II
难度: Hard
题意: 在二维字符网格中搜索多个单词
关键点:
- 将所有单词插入 Trie
- 使用 DFS + Trie 剪枝
- 找到单词后需要去重
完整解答:
1 | class Solution: |
优化技巧:
1 | # 优化1: 剪枝 - 如果某个节点下没有子节点了,删除它 |
题目 4: [648] Replace Words
难度: Medium
题意: 用字典中的词根替换句子中的单词
示例:
1 | Input: dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery" |
解答:
1 | class Solution: |
题目 5: [677] Map Sum Pairs
难度: Medium
题意: 实现一个支持前缀和查询的数据结构
关键点: 在 Trie 节点中存储数值
解答:
1 | class MapSum: |
题目 6: [720] Longest Word in Dictionary
难度: Medium
题意: 找出字典中最长的可以逐个字母构建的单词
示例:
1 | Input: words = ["w","wo","wor","worl","world"] |
解答:
1 | class Solution: |
题目 7: [1268] Search Suggestions System
难度: Medium
题意: 实现搜索建议系统,每输入一个字符返回最多 3 个建议
示例:
1 | Input: products = ["mobile","mouse","moneypot","monitor","mousepad"], |
解答:
1 | class Solution: |