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

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

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

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;
const int maxn = 26;
struct Trie//结点声明
{
struct Trie *next[maxn];//孩子分支
bool isStr;//标记是否构成单词
}; void Insert(Trie *root,const char *s)//将单词s插入Trie树
{
if(root==NULL || *s=='\0')
return;
//int i;
Trie *p = root;
while(*s != '\0')
{
if(p->next[*s-'a'] == NULL) //假设不存在,则建立结点
{
Trie *tmp = (Trie*)malloc(sizeof(Trie));
for(int i=0; i<maxn; i++)
tmp->next[i] = NULL;
tmp->isStr = false;
p->next[*s-'a'] = tmp;
p = p->next[*s-'a'];
}
else
p = p->next[*s-'a'];
s++;
}
p->isStr = true;//单词结束的地方标记此处能够构成一个单词
} int Find(Trie *root, const char *s)
{
Trie *p = root;
while(p!=NULL && *s!='\0')
{
p = p->next[*s-'a'];
s++;
}
return (p!=NULL && p->isStr==true);//在单词结束处的标记为true时,单词才存在
} void Del(Trie *root)//释放整个Trie树的空间
{
for(int i=0; i<maxn; i++)
{
if(root->next[i] != NULL)
Del(root->next[i]);
}
free(root);
} char s[100];
int main()
{
int m,n; //n为建立Trie树输入的单词数,m为要查找的单词数
Trie *root = (Trie *)malloc(sizeof(Trie));
for(int i=0; i<maxn; i++)
root->next[i] = NULL;
root->isStr = false;
scanf("%d",&n);
getchar();
for(int i=0; i<n; i++)//建立Trie树
{
scanf("%s",s);
Insert(root,s );
} while(~scanf("%d",&m))
{
for(int i=0; i<m; i++)
{
scanf("%s",s);
if(Find(root, s) == 1)
puts("Yes");
else
puts("No");
}
puts("");
}
Del(root);
return 0;
}

关于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. C#抽象方法

    在覆盖父类的方法时,必须显式说明是在覆盖父类方法,否则相当于没有覆盖. class Animal { public void run() { Console.WriteLine("anima ...

  2. android中调用系统的发送短信、发送邮件、打电话功能

    1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:");  Intent sendIntent = new Intent(Intent.ACT ...

  3. Linux内核(6) - 模块机制与“Hello World!

    有一种感动,叫内牛满面,有一种机制,叫模块机制.显然,这种模块机制给那些Linux的发烧友们带来了方便,因为模块机制意味着人们可以把庞大的Linux内核划分为许许多多个小的模块.对于编写设备驱动程序的 ...

  4. sublime text怎样安装ctags来定位函数

    sublime确实是一款非常不错的开发软件.用起来非常爽,里面集成了非常多插件.仅仅要安装就可以, 下来来介绍下sublime中ctags插件的安装,安装这个插件之后就能够高速定位某函数了,很方便. ...

  5. centos部署supervisor

    #!/bin/bash yum -y install python-setuptools ping pypi.python.org -c 4 >/dev/null 2>&1 eas ...

  6. HDU--Elevator(水题)

    Elevator nid=24#time"> Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^ 题目描写叙述 The high ...

  7. ASP.NET Helper

  8. js数组设置值操作

    js中给数组中添加新值的方式: var flow=[]; for(var i=0;i<21;i++){ flow.push(Math.floor(Math.random()*(30+((i%12 ...

  9. t:formvalid中定义callback函数

    如果dialog="true"的话       callback="@Override functionName" 调用的是当前页面的方法       call ...

  10. js替换iframe的内容

    使用如下方法可以替换页面中iframe里面的内容: for (var i=0; i<window.parent.frames.length; i++) { //window.parent.fra ...