当前位置:首页 > JavaScript

js实现trie

2026-03-14 23:41:07JavaScript

实现 Trie 数据结构

Trie(前缀树)是一种树形数据结构,用于高效地存储和检索字符串集合中的键。以下是 JavaScript 实现 Trie 的完整代码和详细说明。

Trie 节点结构

每个 Trie 节点包含一个子节点映射和一个标记表示是否为单词结尾:

class TrieNode {
  constructor() {
    this.children = {};  // 存储子节点的映射
    this.isEndOfWord = false;  // 标记是否为单词结尾
  }
}

Trie 类实现

Trie 类提供插入、搜索和前缀匹配等核心功能:

class Trie {
  constructor() {
    this.root = new TrieNode();  // 创建根节点
  }

  // 插入单词
  insert(word) {
    let node = this.root;
    for (const char of word) {
      if (!node.children[char]) {
        node.children[char] = new TrieNode();
      }
      node = node.children[char];
    }
    node.isEndOfWord = true;
  }

  // 搜索完整单词
  search(word) {
    let node = this.root;
    for (const char of word) {
      if (!node.children[char]) {
        return false;
      }
      node = node.children[char];
    }
    return node.isEndOfWord;
  }

  // 检查前缀是否存在
  startsWith(prefix) {
    let node = this.root;
    for (const char of prefix) {
      if (!node.children[char]) {
        return false;
      }
      node = node.children[char];
    }
    return true;
  }
}

使用示例

const trie = new Trie();
trie.insert("apple");
console.log(trie.search("apple"));   // true
console.log(trie.search("app"));     // false
console.log(trie.startsWith("app")); // true
trie.insert("app");
console.log(trie.search("app"));     // true

性能说明

  • 插入时间复杂度:O(n),n 为单词长度
  • 搜索时间复杂度:O(n),n 为单词长度
  • 空间复杂度:O(m*n),m 为字符集大小,n 为所有单词总长度

扩展功能

实现删除操作需要递归处理节点:

js实现trie

delete(word, node = this.root, index = 0) {
  if (index === word.length) {
    if (!node.isEndOfWord) return false;
    node.isEndOfWord = false;
    return Object.keys(node.children).length === 0;
  }

  const char = word[index];
  if (!node.children[char]) return false;

  const shouldDeleteChild = this.delete(word, node.children[char], index + 1);
  if (shouldDeleteChild) {
    delete node.children[char];
    return Object.keys(node.children).length === 0 && !node.isEndOfWord;
  }
  return false;
}

这种实现方式适用于大多数需要字符串高效检索的场景,如自动补全、拼写检查等应用。

标签: jstrie
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…