返回
LeetCode 题解:208. 实现 Trie (前缀树),对象,JavaScript,详细注释
前端
2024-01-05 16:08:31
前言
Trie,也称前缀树,是一种树形数据结构,用于存储字符串。Trie 的特点是,字符串中的每个字符都存储在一个节点中,并且这些节点按照字符顺序排列。这使得 Trie 非常适合用于字符串搜索和匹配。
Trie 的定义
Trie 是一个树形数据结构,它由以下元素组成:
- 根节点 :Trie 的根节点不存储任何字符。
- 内部节点 :Trie 的内部节点存储一个字符,并且指向其他节点。
- 叶节点 :Trie 的叶节点存储一个字符,并且没有指向其他节点的指针。
Trie 的操作
Trie 的操作主要包括以下几个方面:
- 插入 :将一个字符串插入 Trie 中。
- 删除 :从 Trie 中删除一个字符串。
- 搜索 :在 Trie 中搜索一个字符串。
- 查找 :在 Trie 中查找一个字符串的前缀。
使用 JavaScript 实现 Trie
使用 JavaScript 实现 Trie 的步骤如下:
- 定义一个 Trie 类。
- 在 Trie 类中定义一个根节点。
- 在 Trie 类中定义插入、删除、搜索和查找方法。
- 实现 Trie 类的插入、删除、搜索和查找方法。
LeetCode 上实现 Trie 的示例代码
以下是在 LeetCode 上实现 Trie 的示例代码:
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(word) {
let current = this.root;
for (let i = 0; i < word.length; i++) {
const char = word[i];
if (!current.children[char]) {
current.children[char] = new TrieNode();
}
current = current.children[char];
}
current.isWord = true;
}
delete(word) {
let current = this.root;
for (let i = 0; i < word.length; i++) {
const char = word[i];
if (!current.children[char]) {
return;
}
current = current.children[char];
}
current.isWord = false;
}
search(word) {
let current = this.root;
for (let i = 0; i < word.length; i++) {
const char = word[i];
if (!current.children[char]) {
return false;
}
current = current.children[char];
}
return current.isWord;
}
startsWith(prefix) {
let current = this.root;
for (let i = 0; i < prefix.length; i++) {
const char = prefix[i];
if (!current.children[char]) {
return false;
}
current = current.children[char];
}
return true;
}
}
class TrieNode {
constructor() {
this.children = {};
this.isWord = false;
}
}
结语
Trie 是一种非常有用的数据结构,它可以用于解决许多字符串相关的问题。使用 JavaScript 实现 Trie 并不难,只需要掌握 Trie 的基本原理即可。