当前位置: 首页 > news >正文

数据结构 - 字典树 Trie

字典树(Trie)是一种树形数据结构,主要用于高效地存储和检索字符串集合。它通过利用字符串的公共前缀来节省存储空间,常用于词典查询、自动补全等场景。

1. 什么是字典树

字典树的每条边代表一个字符,从根节点到某一节点的路径表示一个字符串。如果某节点被标记为结束节点,则表示该路径对应的字符串存在于集合中。

2. 字典树的基本操作

字典树的核心操作包括插入和查找,时间复杂度通常为字符串长度的线性级别,比暴力搜索更高效。

2.1 树的构造

对于每个树的节点,应该包含以下字段:

  • 指向子节点的数组 children,数组长度为所有字符的数量;
  • 一个布尔变量 end,用于指定是否为字符串结尾。
2.2 插入节点
void insert(std::string word) {Trie *node = this;for (char c : word) {c -= 'a';if (node->children[c] == nullptr) {node->children[c] = new Trie();}node = node->children[c];}node->end = true;
}
2.3 查询
bool searchPrefix(std::string prefix) {Trie *node = this;for (char c : prefix) {c -= 'a';if (node->children[c] == nullptr) {return false;}node = node->children[c];}return node != nullptr && node->end;
}
2.4 代码模版
class Trie {
public:void insert(std::string word) {Trie *node = this;for (char c : word) {c -= 'a';if (node->children[c] == nullptr) {node->children[c] = new Trie();}node = node->children[c];}node->end = true;}bool searchPrefix(std::string prefix) {Trie *node = this;for (char c : prefix) {c -= 'a';if (node->children[c] == nullptr) {return false;}node = node->children[c];}return node != nullptr && node->end;}private:std::vector<Trie*> children;bool end;
};

3. 示例

208. 实现 Trie (前缀树)

http://www.jsqmd.com/news/8311/

相关文章:

  • 激活函数实现
  • 漏洞赏金入门指南:从零开始的实战方法论
  • PMON failed to acquire latch 的报错及sqlplus / as sysdba 无法连接 - 详解
  • 【C++哲学】面向对象的三大特性之 多态 - 实践
  • 2025CSP-S模拟赛58 比赛总结
  • 精读C++设计模式20 —— 结构型设计模式:桥接模式 - 详解
  • Gateway-过滤器 - 教程
  • RabbitMQ的安装集群、镜像队列部署
  • 单一训练模式适应多个机器人本体 —— skiled brain —— 机器人酷刑现场,竟是为了锻造全能大脑,网友:求AGI饶了我
  • 2025/10/4 总结
  • win10界面如何改成经典菜单?
  • Qt处理Windows平板上摄像头
  • 你必须知道的TCP和UDP核心区别,快速搞懂这两大协议!
  • 机器学习——朴素贝叶斯详解 - 指南
  • [swift 外部干涉法 extension]
  • 2025国庆Day3
  • 量子迁移计划启动:应对未来密码学挑战
  • HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包
  • 大模型原理与实践:第三章-预训练语言模型详解_第1部分-Encoder-only(BERT、RoBERTa、ALBERT) - 指南
  • 详细介绍:Linux字符设备驱动开发全攻略
  • 深入解析:uniapp集成语音识别与图片识别集成方案【百度智能云】
  • sql注入和xss漏洞
  • 数学 trick
  • Python 2025:异步革命与AI驱动下的开发新范式 - 详解
  • 完整教程:精读C++20设计模式——行为型设计模式:解释器模式
  • js疑惑
  • 使用 Git Submodule 管理微服务项目:从繁琐到高效 - 指南
  • 深入解析:单元测试学习+AI辅助单测
  • 20251004国庆模拟4
  • 珂朵莉树 ODT