Trie树的建立与简单应用
来源:互联网 发布:java多线程socket队列 编辑:程序博客网 时间:2024/05/29 14:32
Trie树即字典树。是把多个串中的字母逐个插入到一开始只有根结点的树上二构成的树。Trie树的边表示的是模式串中的字母,从根结点走到任意节点经过的路径称为路径字符串。从根结点到叶子节点的路径字符串即为一个原来建树的模式串。Trie在解决涉及串的前缀时特别方便。
这是具体的讲解和测试题
我的代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cstring>using namespace std;struct Node{ Node * child[26]; Node *prev; int count; Node() { memset(child, 0, sizeof(child)); count = 0; prev = NULL; }};Node Tree[1000000]; //静态申请空间。int nodeCount;void insertNode(Node *tree, char *s){ int i; Node * p = tree; for(i = 0; s[i]; i++) { if(p->child[s[i]-'a'] == 0) { p->child[s[i]-'a'] = tree + nodeCount; //将各个节点按次序分配到数组的相应位置。 nodeCount++; } p = p->child[s[i]-'a']; p->count++; //经过该节点,统计次数加一。 }}int search(Node *tree, char * s){ int i; Node *p = tree; for(i = 0; s[i]; i++) //循环走的最后个节点。 { p = p->child[s[i]-'a']; if(!p) { return 0; } } return p->count; //最后个节点出现的次数即该串出现的次数。}int main(){ int n, m, i, j; scanf("%d", &n); char s[12]; nodeCount = 1; for(i = 0; i < n; i++) { scanf(" %s", s); insertNode(Tree+1, s); } scanf("%d", &m); for(i = 0; i < m; i++) { scanf(" %s", s); printf("%d\n", search(Tree+1, s)); } return 0;}
0 0
- Trie树的建立与简单应用
- Trie树的简单应用
- Trie树的建立与相关操作
- HihoCoder第二周与POJ3630:Trie树的建立
- Trie 树及其简单应用
- Trie树的应用
- poj 2945 Find the Clones trie树的简单应用
- 字典(trie)树的应用与实现
- HDU1251(统计难题)---Trie树简单应用
- 【1251 (统计难题)---Trie树简单应用 】
- hdu 1671 Trie树简单应用
- Trie树与Trie图的学习
- Trie Tree (字典树)的简单使用 与 模板。
- Trie 树的简单实现
- 最简单的trie树
- trie 树的简单实现
- trie树建立
- 二叉树的递归建立与应用
- 【牛腩】div+css模型
- oc 的优缺点
- 使用Socket实现简单聊天
- Windows Phone 8.1中页面导航切换动画特效
- readwrite,readonly,assign,retain,copy,nonatomic属性的作用
- Trie树的建立与简单应用
- Android学习笔记之AndroidManifest.xml文件解析
- iOS-Block的简单使用
- leetcode Interleaving String
- oracle导入导出文件补充
- 教你如何把excel中的数据导入到Mysql中
- 编写一个登陆界面不连接数据库验证用户
- ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?
- uboot----getenv_IPaddr代码解析