字典树
来源:互联网 发布:遥控怎么切换网络电视 编辑:程序博客网 时间:2024/06/06 02:45
字典树
#include <cstdio>using namespace std;#define TREE_WIDTH 26struct Node { int path; int end; char ch; Node * next[TREE_WIDTH]; Node (char ch = ' ') { this -> ch = ch; this -> path = this -> end = 0; for (int i = 0; i < TREE_WIDTH; i++) { this -> next[i] = nullptr; } }};class TrieTree {private: Node * root;public: TrieTree (); ~TrieTree (); void destroy (Node * t); void add (char * s); int query (char * s); bool remove (char * s);};TrieTree::TrieTree () { root = new Node;}TrieTree::~TrieTree () { destroy (root);}void TrieTree::destroy (Node * t) { for (int i = 0; i < TREE_WIDTH; i++) { if (t -> next[i]) { destroy (t -> next[i]); } } delete t;}void TrieTree::add (char * s) { Node * t = root; while (*s) { if (t -> next[*s - 'a'] == nullptr) { t -> next[*s - 'a'] = new Node(*s); } t -> next[*s - 'a'] -> path++; t = t -> next[*s - 'a']; s++; } t -> end++;}int TrieTree::query (char * s) { Node * t = root; while (*s) { if (t -> next[*s - 'a'] == nullptr || t -> next[*s - 'a'] == 0) { return 0; } t = t -> next[*s - 'a']; s++; } return t -> end;}bool TrieTree::remove (char *s) { Node * t = root; if (query (s)) { Node * t = root; while (*s) { t -> next[*s - 'a'] -> path--; t = t -> next[*s - 'a']; s++; } t -> end--; return true; } return false;}int main () { TrieTree tree; return 0;}
阅读全文
0 0
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树。。
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 图片加载框架Glide使用教程
- IoC(控制反转)和DI(依赖注入)
- 最小表示法
- java hibernate 关联关系有什么作用
- gdb如何查看内存
- 字典树
- 使用Java程序调用Matlab
- oracle 导入导出表
- Android源码分析之Builder模式
- [设计模式](八):组合模式(Composite)与享元模式(Flyweight)详解
- 【勤哲应用】用勤哲Excel服务器做机械企业管理系统
- 转载 C# 连接 Oracle 的几种方式
- 通过SHA_init/SHA_update/SHA_final生成sha散列值
- PhpStorm License Server