当前位置:首页 > JavaScript

js实现trie

2026-03-14 23:41:07JavaScript

实现 Trie 数据结构

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

js实现trie

Trie 节点结构

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

js实现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 为所有单词总长度

扩展功能

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

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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

jquery js

jquery js

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

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…