208. 实现 Trie (前缀树)
问题描述
Trie(发音类似 “try”)或者说前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。Trie 有以下三个基本操作:
insert(word):向前缀树中插入一个字符串search(word):查找字符串是否完全匹配startsWith(prefix):查找是否存在以该前缀开头的字符串
示例:
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // 返回 true
trie.search("app"); // 返回 false
trie.startsWith("app"); // 返回 true
trie.insert("app");
trie.search("app"); // 返回 true
算法思路
核心思想:多叉树结构 + 标记位
- 树结构:每个节点有 26 个子节点(对应 a-z)
- 路径表示:从根到节点的路径表示一个字符串
- 结束标记:
isEnd标记表示从根到该节点的路径是否构成一个完整单词
操作原理:
- 插入:逐字符创建节点,最后标记结束
- 搜索:遍历路径,检查是否存在且标记结束
- 前缀搜索:遍历路径,检查是否存在
代码实现
class Trie {
private TrieNode root;
public Trie() {
root = new TrieNode();
}
/**
* 向前缀树中插入一个单词
*
* @param word 要插入的单词
*/
public void insert(String word) {
TrieNode node = root;
// 逐字符处理
for (char c : word.toCharArray()) {
int index = c - 'a'; // 转换为0-25的索引
// 如果对应子节点不存在,则创建
if (node.children[index] == null) {
node.children[index] = new TrieNode();
}
// 移动到子节点
node = node.children[index];
}
// 标记单词结束
node

最低0.47元/天 解锁文章
1355

被折叠的 条评论
为什么被折叠?



