返回

LeetCode 题解:208. 实现 Trie (前缀树),对象,JavaScript,详细注释

前端

前言

Trie,也称前缀树,是一种树形数据结构,用于存储字符串。Trie 的特点是,字符串中的每个字符都存储在一个节点中,并且这些节点按照字符顺序排列。这使得 Trie 非常适合用于字符串搜索和匹配。

Trie 的定义

Trie 是一个树形数据结构,它由以下元素组成:

  • 根节点 :Trie 的根节点不存储任何字符。
  • 内部节点 :Trie 的内部节点存储一个字符,并且指向其他节点。
  • 叶节点 :Trie 的叶节点存储一个字符,并且没有指向其他节点的指针。

Trie 的操作

Trie 的操作主要包括以下几个方面:

  • 插入 :将一个字符串插入 Trie 中。
  • 删除 :从 Trie 中删除一个字符串。
  • 搜索 :在 Trie 中搜索一个字符串。
  • 查找 :在 Trie 中查找一个字符串的前缀。

使用 JavaScript 实现 Trie

使用 JavaScript 实现 Trie 的步骤如下:

  1. 定义一个 Trie 类。
  2. 在 Trie 类中定义一个根节点。
  3. 在 Trie 类中定义插入、删除、搜索和查找方法。
  4. 实现 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 的基本原理即可。