说明:

以下代码是个人按照自己的理解写的,可能有错误或者不太规范的地方,欢迎指出!

代码如下:

//插入、删除、查询、遍历四种操作
//注意:四种操作的函数实现中,T都是指向上一个结点的指针,以此方便操作。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps = 1e-6;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+7;
const int maxn = 100+10; typedef struct node
{
bool exist; //是否存在单词
int cnt; //作为多少个单词的前缀,不算自己
struct node *next[26]; void init()
{
exist = cnt = 0;
memset(next,0,sizeof(0));
} }Node, *Tree; void insert(Tree &T, char *s, int k)
{
if(!T)
{
T = new Node;
T->init();
} if(!s[k]) //单词尾
{
T->exist = true; //标记单词存在
}
else
{
T->cnt++; //作为前缀
insert(T->next[s[k]-'a'], s, k+1);
}
} char ans[100]; //存储路径
void traverse(Tree T, int k) //字典序遍历,实际上就是先序遍历
{
if(T->exist) //如果该节点标有单词编号,则输出路径
{
ans[k] = 0;
cout<<ans<<endl;
} for(int i = 0; i<26; i++)
{
if(T->next[i])
{
ans[k] = i+'a';
traverse(T->next[i], k+1);
}
}
} int search(Tree T, char *s, int k)
{
if(!T) return 0; //结点不存在,则单词不存在 if(!s[k]) //结点存在,还要看单词是否存在
{
return T->exist;
}
else //继续往下找
{
return search(T->next[s[k]-'a'], s, k+1);
}
} bool del(Tree &T, char *s, int k)
{
if(!T) return 0; if(!s[k])
{
if(T->cnt) //如果作为单词的前缀,则只标记此单词不存在
{
T->exist = 0;
}
else //如果不作为其他单词的前缀,则直接删除
{
delete T;
T = NULL;
}
return 1;
}
else
{
if(del(T->next[s[k]-'a'], s, k+1))
{
T->cnt--;
if(!T->exist && !T->cnt) //既不作为单词的前缀,又不作为单词,则直接删除
{
delete T;
T = NULL;
}
return 1;
}
return 0;
}
} int main()
{
Tree T;
T = new Node;
T->init(); int n;
cin>>n;
char s[100];
for(int i = 1; i<=n; i++)
{
cin>>s;
insert(T,s,0);
}
traverse(T,0); cin>>s;
del(T,s,0);
traverse(T,0); cin>>s;
cout<< search(T,s,0) <<endl;
}

字典树(Trie树) C++实现的更多相关文章

  1. 字典树(Trie树)的实现及应用

    >>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...

  2. [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序

    一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 ...

  3. Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  4. 洛谷$P4585\ [FJOI2015]$火星商店问题 线段树+$trie$树

    正解:线段树+$trie$树 解题报告: 传送门$QwQ$ $umm$题目有点儿长我先写下题目大意趴$QwQ$,就说有$n$个初始均为空的集合和$m$次操作,每次操作为向某个集合内加入一个数$x$,或 ...

  5. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

  6. [转载]字典树(trie树)、后缀树

    (1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询.我们做即时响应用户输入的AJAX搜索框时,就是Trie开始.本质上,Trie是一颗存储多个字符串的树.相邻节点间的边 ...

  7. Luogu P2922 [USACO08DEC]秘密消息Secret Message 字典树 Trie树

    本来想找\(01Trie\)的结果找到了一堆字典树水题...算了算了当水个提交量好了. 直接插入模式串,维护一个\(Trie\)树的子树\(sum\)大小,求解每一个文本串匹配时走过的链上匹配数和终点 ...

  8. 字典树 trie树 学习

    一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种   二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...

  9. 【字符串算法】字典树(Trie树)

    什么是字典树 基本概念 字典树,又称为单词查找树或Tire树,是一种树形结构,它是一种哈希树的变种,用于存储字符串及其相关信息. 基本性质 1.根节点不包含字符,除根节点外的每一个子节点都包含一个字符 ...

  10. 字典树 Trie树

    什么是Trie树? 形如 其中从根节点到红色节点的路径上的字母所连成的字符串即为一个Trie树上所存的字符串. 比如,这个trie树上有ab,abc,bd,dda这些字符串. 至于怎么构建和查找或添加 ...

随机推荐

  1. jmeter录制接口以及并发测试

    http://jingyan.baidu.com/article/15622f2475601dfdfdbea548.html

  2. SHoj A序列

    A序列 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:05   时间限制: 1000ms   内存限制: 128M 描述 如果一个序列有奇数个正整数组成,不妨令 ...

  3. [C/C++] 结构体内存对齐用法

    一.为什么要内存对齐 经过内存对齐之后,CPU的内存访问速度大大提升; 内存空间按照byte划分,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内 ...

  4. docker-nginx-标记一下

    拉取nginx镜像 然后启动容器: docker run -p : --name mynginx -d -v $PWD/nginx.conf:/etc/nginx/conf.d/default.con ...

  5. eclipse 安卓虚拟机安装apk 及常见问题

    首先必须启动虚拟机然后如图操作:

  6. 《从零开始搭建游戏服务器》MySQL安装配置

    一.下载资源: 到MySQL官网下载免安装版的mysql包,或者直接点击此链接下载:mysql-5.7.19-winx64.zip 二.解压配置: 将上面下载的安装包解压到一个本地目录下,在得到的my ...

  7. Callable和Runnable和FutureTask

    http://www.cnblogs.com/dolphin0520/p/3949310.html 一.Callable与Runnable 二.Future 三.FutureTask 四.使用示例 一 ...

  8. MongoDB学习day10--Mongoose的populate实现关联查询

    一.Mongoose populate官方文档 https://mongoosejs.com/docs/populate.html 二.Mongoose populate关联查询 1.定义ref va ...

  9. Java修饰符关键字的顺序

    Java语言规范建议按以下顺序列出修饰符: 1. Annotations 2. public 3. protected 4. private 5. abstract 6. static 7. fina ...

  10. 在智能手机上跟踪ADS-B系统的飞机航线信息

    飞机飞行的中断可能会给航空公司造成数十亿美员的损失,但即便如此大多数现代商业航班仍旧依赖于存有严重安全问题的空中交通管制系统.到2020年,这些系统将会被升级为一个被称之为NextGen的系统,该系统 ...