字典树(Trie树、单词查找树、前缀树)
2015-08-24 16:55
555 查看
字典树,又称单词查找树、Trie树、前缀树,哈希树的一个变种,主要应用于字符串的排序、保存等。
下面为一个and,as,at,cn,com
构造的字典树
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/01/3b961cd26cc169b3b0051078513b2275)
从图中可以看出字典树的3个基本性质:
1、根节点不包含字符,除根节点外每一个节点都只包含一个字符;
2、从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
3、每个节点的所有子节点包含的字符都不相同。
基本操作:
参考整合自:
点击打开链接,点击打开链接
下面为一个and,as,at,cn,com
构造的字典树
从图中可以看出字典树的3个基本性质:
1、根节点不包含字符,除根节点外每一个节点都只包含一个字符;
2、从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
3、每个节点的所有子节点包含的字符都不相同。
基本操作:
</pre><pre name="code" class="plain">#define MAX 26//字符集大小 typedef struct TrieNode { int nCount;//记录该字符出现次数 struct TrieNode* next[MAX]; }TrieNode; TrieNode Memory[1000000]; int allocp=0; /*初始化*/ void InitTrieRoot(TrieNode* *pRoot) { *pRoot=NULL; } /*创建新结点*/ TrieNode* CreateTrieNode() { int i; TrieNode *p; p=&Memory[allocp++]; p->nCount=1; for(i=0;i<MAX;i++) { p->next[i]=NULL; } return p; } /*插入*/ void InsertTrie(TrieNode* *pRoot,char *s) { inti,k; TrieNode*p; if(!(p=*pRoot)) { p=*pRoot=CreateTrieNode(); } i=0; while(s[i]) { k=s[i++]-'a';//确定branch if(p->next[k]) p->next[k]->nCount++; else p->next[k]=CreateTrieNode(); p=p->next[k]; } } //查找 int SearchTrie(TrieNode* *pRoot,char *s) { TrieNode *p; int i,k; if(!(p=*pRoot)) { return0; } i=0; while(s[i]) { k=s[i++]-'a'; if(p->next[k]==NULL) return 0; p=p->next[k]; } return p->nCount; }
参考整合自:
点击打开链接,点击打开链接
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C#实现获取系统目录并以Tree树叉显示的方法
- 数据结构之Treap详解
- C语言实现输入一颗二元查找树并将该树转换为它的镜像
- 字典树的基本知识及使用C语言的相关实现
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- 纯jsp打造无限层次的树代码
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字