Trie树又称单词查找树,Trie树,是一种树形结构。是一种哈希树的变种。典型应用是用于统计。排序和保存大量的字符串(但不仅限于字符串),所以常常被搜索引擎系统用于文本词频统计。

它的长处是:利用字符串的公共前缀来降低查询时间,最大限度地降低无谓的字符串比較。查询效率比哈希树高。 ——-百度百科

详细给出代码,这也是依据大牛们的一些代码整的。,还是太渣了。。。。。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <string>
  6. using namespace std;
  7. const int maxn = 26;
  8. struct Trie//结点声明
  9. {
  10. struct Trie *next[maxn];//孩子分支
  11. bool isStr;//标记是否构成单词
  12. };
  13. void Insert(Trie *root,const char *s)//将单词s插入Trie树
  14. {
  15. if(root==NULL || *s=='\0')
  16. return;
  17. //int i;
  18. Trie *p = root;
  19. while(*s != '\0')
  20. {
  21. if(p->next[*s-'a'] == NULL) //假设不存在,则建立结点
  22. {
  23. Trie *tmp = (Trie*)malloc(sizeof(Trie));
  24. for(int i=0; i<maxn; i++)
  25. tmp->next[i] = NULL;
  26. tmp->isStr = false;
  27. p->next[*s-'a'] = tmp;
  28. p = p->next[*s-'a'];
  29. }
  30. else
  31. p = p->next[*s-'a'];
  32. s++;
  33. }
  34. p->isStr = true;//单词结束的地方标记此处能够构成一个单词
  35. }
  36. int Find(Trie *root, const char *s)
  37. {
  38. Trie *p = root;
  39. while(p!=NULL && *s!='\0')
  40. {
  41. p = p->next[*s-'a'];
  42. s++;
  43. }
  44. return (p!=NULL && p->isStr==true);//在单词结束处的标记为true时,单词才存在
  45. }
  46. void Del(Trie *root)//释放整个Trie树的空间
  47. {
  48. for(int i=0; i<maxn; i++)
  49. {
  50. if(root->next[i] != NULL)
  51. Del(root->next[i]);
  52. }
  53. free(root);
  54. }
  55. char s[100];
  56. int main()
  57. {
  58. int m,n; //n为建立Trie树输入的单词数,m为要查找的单词数
  59. Trie *root = (Trie *)malloc(sizeof(Trie));
  60. for(int i=0; i<maxn; i++)
  61. root->next[i] = NULL;
  62. root->isStr = false;
  63. scanf("%d",&n);
  64. getchar();
  65. for(int i=0; i<n; i++)//建立Trie树
  66. {
  67. scanf("%s",s);
  68. Insert(root,s );
  69. }
  70. while(~scanf("%d",&m))
  71. {
  72. for(int i=0; i<m; i++)
  73. {
  74. scanf("%s",s);
  75. if(Find(root, s) == 1)
  76. puts("Yes");
  77. else
  78. puts("No");
  79. }
  80. puts("");
  81. }
  82. Del(root);
  83. return 0;
  84. }

关于Trie树的模板的更多相关文章

  1. LightOJ 1129 - Consistency Checker Trie树模板

    题意:给出n条串判断是否存在一个串为另一个串的前缀. 思路:套Trie树的模板,先全部插入,再查找每个字串,如果查找字串完毕,但还存在下一个节点,说明存在前缀. /** @Date : 2016-11 ...

  2. 【数据结构与算法】Trie(前缀树)模板和例题

    Trie 树的模板 Trie 树的简介 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.他的核心思想是空间换 ...

  3. ZOJ 1109 Language of FatMouse 【Trie树】

    <题目链接> 题目大意: 刚开始每行输入两个单词,第二个单词存入单词库,并且每行第二个单词映射着对应的第一个单词.然后每行输入一个单词,如果单词库中有相同的单词,则输出它对应的那个单词,否 ...

  4. HDU - 1251 统计难题(Trie树)

    有很多单词(只有小写字母组成,不会有重复的单词出现) 要统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). 每个单词长度不会超过10. Trie树的模板题.这个题内存把控不好容易MLE. ...

  5. 第一课trie 树 POJ 2001

    最短前缀(Openjudge上抄的) 总时间限制: 1000ms 内存限制: 65536kB 描述 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的 ...

  6. HDU 1251 Trie树模板题

    1.HDU 1251 统计难题  Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ...

  7. Phone list(Trie树模板)

    Phone List 共t组数据,给定n个长度不超过10的字符串,问其中是否存在两个数S,T,使得S是T的前缀. 存在则输出NO,不存在输出YES 输入样例#1: 2 3 911 97625999 9 ...

  8. hiho #1014 : Trie树(模板)

    Trie树 [题目链接]Trie树 &题意: 输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英 ...

  9. 模板 Trie树

    模板 Trie树 code: #include <iostream> #include <cstdio> using namespace std; const int wx=2 ...

随机推荐

  1. 制作IOS 后台极光推送时,遇到的小问题

    推送广义上分为两种, 一种是  程序在前台的时候,不想在任务栏里面显示通知,直接在app中进行某种操作.这个叫做自定义消息.这个是在前台时,app与极光后台建立了一个长链接. 另一种是  程序处于前. ...

  2. Python学习笔记020——数据库知识概述

    数据库概述 1 提供数据库的软件都有哪些 MySQL.SQL_Server.Oracle.DB2.Mariadb.MongoDB ... (1)是否开源 开源软件:MySQL.Mariadb.Mong ...

  3. android调节屏幕亮度

    一:只改变当前程序android屏幕亮度(1)方法:lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0(系统设定).0.0(暗)-1.0(亮 ...

  4. 关于Andorid的RecyclerView在V7包下找不到的解决办法

      关于Andorid的RecyclerView在V7包下找不到的解决办法 最近在学习使用RecyclerView替换现有的ListView,看了几篇文章.当准备自己动手实现的时候发现,V7包下找不到 ...

  5. Mysql 数据备份与恢复,用户创建,授权

    Mysql 数据备份与恢复,用户创建,授权 1. Mysqldump >outfile.sql 2. Mysql –uxxx –pxxx < backfile.sql 3. Create  ...

  6. uva 116 - Unidirectional TSP (动态规划)

    第一次做动规题目,下面均为个人理解以及个人方法,状态转移方程以及状态的定义也是依据个人理解.请过路大神不吝赐教. 状态:每一列的每个数[ i ][ j ]都是一个状态: 然后定义状态[ i ][ j ...

  7. find命令之exec和xargs

    exec: find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是c ...

  8. Nginx+mysql+php(待补全)

    先安装 Nginx 通过源码安装可以指定目录(/usr/local/Nginx/) yum或源码安装Mysql yum或源码安装php(记得命令一定要全,别忘了安装php-fpm) 待补全

  9. SpringBoot进阶

    一.表单验证 二.AOP处理请求 AOP是一种编程范式.与语言无关,是一种程序设计思想. 面向过程到面向对象.换个角度看世界,换个姿势处理问题. 2.1AOP实例-http请求 MAVEN添加依赖:o ...

  10. Linux服务器开发初步

      服务器开发需要考虑的内容很多,比如服务器的架构.稳定性.性能以及负载能力等等. 事实上,在开发服务器的过程中,需要综合考虑各种因素,比如就客户端连接时间较短却又比较频繁的服务器(例如HTTP服务器 ...