Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。
相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.
其基本性质可以归纳为:
1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
3. 每个节点的所有子节点包含的字符都不相同。
其基本操作有:查找 插入和删除,当然删除操作比较少见.我在这里只是实现了对整个树的删除操作,至于单个word的删除操作也很简单.
搜索字典项目的方法为:
(1) 从根结点开始一次搜索;
(2) 取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索;
(3) 在相应的子树上,取得要查找关键词的第二个字母,并进一步选择对应的子树进行检索。(4) 迭代过程……(5) 在某个结点处,关键词的所有字母已被取出,则读取附在该结点上的信息,即完成查找。
其他操作类似处理.
/*
Name:Trie树的基本实现
Author:MaiK
Description:Trie树的基本实现,包括查找插入和删除操作*/
#include<algorithm>
#include<iostream>
usingnamespacestd;
constintsonnum=26,base='a';
structTrie
{
intnum;//torememberhowmanywordcanreachhere,thatistosay,prefix
boolterminal;//Ifterminal==true,thecurrentpointhasnofollowingpoint
structTrie*son[sonnum];//thefollowingpoint
};
Trie*NewTrie()//createanewnode
{
Trie*temp=newTrie;
temp->num=1;temp->terminal=false;
for(inti=0;i<sonnum;++i)temp->son[i]=NULL;
returntemp;
}
voidInsert(Trie*pnt,char*s,intlen)//insertanewwordtoTrietree
{
Trie*temp=pnt;
for(inti=0;i<len;++i)
{
if(temp->son[s[i]-base]==NULL)temp->son[s[i]-base]=NewTrie();
elsetemp->son[s[i]-base]->num++;
temp=temp->son[s[i]-base];
}
temp->terminal=true;
}
voidDelete(Trie*pnt)//deletethewholetree
{
if(pnt!=NULL)
{
for(inti=0;i<sonnum;++i)if(pnt->son[i]!=NULL)Delete(pnt->son[i]);
deletepnt;
pnt=NULL;
}
}
Trie*Find(Trie*pnt,char*s,intlen)//trietofindthecurrentword
{
Trie*temp=pnt;
for(inti=0;i<len;++i)
if(temp->son[s[i]-base]!=NULL)temp=temp->son[s[i]-base];
elsereturnNULL;
returntemp;
}
Name:Trie树的基本实现
Author:MaiK
Description:Trie树的基本实现,包括查找插入和删除操作*/
#include<algorithm>
#include<iostream>
usingnamespacestd;
constintsonnum=26,base='a';
structTrie
{
intnum;//torememberhowmanywordcanreachhere,thatistosay,prefix
boolterminal;//Ifterminal==true,thecurrentpointhasnofollowingpoint
structTrie*son[sonnum];//thefollowingpoint
};
Trie*NewTrie()//createanewnode
{
Trie*temp=newTrie;
temp->num=1;temp->terminal=false;
for(inti=0;i<sonnum;++i)temp->son[i]=NULL;
returntemp;
}
voidInsert(Trie*pnt,char*s,intlen)//insertanewwordtoTrietree
{
Trie*temp=pnt;
for(inti=0;i<len;++i)
{
if(temp->son[s[i]-base]==NULL)temp->son[s[i]-base]=NewTrie();
elsetemp->son[s[i]-base]->num++;
temp=temp->son[s[i]-base];
}
temp->terminal=true;
}
voidDelete(Trie*pnt)//deletethewholetree
{
if(pnt!=NULL)
{
for(inti=0;i<sonnum;++i)if(pnt->son[i]!=NULL)Delete(pnt->son[i]);
deletepnt;
pnt=NULL;
}
}
Trie*Find(Trie*pnt,char*s,intlen)//trietofindthecurrentword
{
Trie*temp=pnt;
for(inti=0;i<len;++i)
if(temp->son[s[i]-base]!=NULL)temp=temp->son[s[i]-base];
elsereturnNULL;
returntemp;
}
相关推荐
ACM Trie树 模板,字典树模板,数据结构
**哈希 Trie 树(HashTrie)与字典树(Trie树)详解** 哈希 Trie 树,也称为 HashTrie 或者是哈希化的 Trie 树,是一种结合了哈希表和 Trie 数据结构特点的数据结构。它在 Trie 树的基础上引入了哈希函数,提高了...
"Trie树(字典树)基本原理" Trie 树,也称为字典树,是一种树形数据结构,用于高效存储和查询字符串。其核心思想是空间换时间,即通过占用更多的存储空间来换取查询速度的提高。 Trie 树的基本结构是一个节点数组...
Trie树(字典树)和后缀树是两种用于处理字符串问题的高级数据结构,在算法面试中是高频考点,对于程序员来说,掌握它们对于解决实际问题非常重要。Trie树适合解决单词查找以及统计问题,而后缀树则在字符串模式匹配...
Trie树,也被称为字典树或前缀树,是一种数据结构,主要用于高效地存储和检索字符串集合中的数据。在Trie树中,每个节点代表一个字符串的前缀,从根节点到某个节点的路径上的字符序列构成了该节点对应的字符串。这种...
#### 一、Trie树简介 Trie树,也称为前缀树或字典树,是一种用于存储字符串数据结构。它利用字符串间的公共前缀来减少所需的存储空间,使得查找字符串更加高效。Trie树在很多应用中都有广泛的应用,如拼写检查、自动...
Trie树,又称字典树或前缀树,是一种用于快速检索的多叉树结构,广泛应用于字符串处理领域。它能有效地利用字符串的公共前缀来减少存储空间,并在查询、插入和删除等方面具有较高的效率。 #### Trie树基本特性 - *...
Trie树,又称字典树、单词查找树,是一种用于处理字符串相关问题的高效数据结构。其核心思想是通过空间换时间,利用字符串的公共前缀来节约存储空间,并减少无谓的字符串比较,从而达到快速查找、插入和删除字符串的...
在实现Trie树时,我们可以使用结构体来表示每个节点,结构体中包含该节点的字符、该节点的子节点数组、该节点的终结标志等信息。这样可以方便地插入、删除和查找操作。 在实际应用中,Trie树有很多的应用场景,例如...
字典树,也被称为Trie树或前缀树,是一种高效的数据结构,尤其适用于字符串相关的查找和插入操作。在计算机科学领域,它被广泛应用在字典、搜索引擎、自动补全功能以及IP路由等方面。Trie树的核心优势在于其能够通过...
总的来说,Java实现的字典树TrieTree是一个强大的工具,尤其适用于处理大量字符串数据,如四六级高频词汇的存储和查询。通过理解和运用这种数据结构,我们可以提高算法效率,优化应用程序的性能。
傻傻分不清楚Trie树,又称字典树,是一种树形数据结构被广泛用于字符串的统计Trie树的构造Trie树节点的每个儿子都代表一个字母那么就可以用某节点到根的路径来
在计算机科学领域,Trie树(又称前缀树或字典树)是一种用于存储具有共同前缀的字符串的高效数据结构。它广泛应用于各种场景,如自动补全、拼写检查以及IP路由表等。本文将详细介绍如何在C/C++中实现一个基本的Trie...
基于Java链表实现的字典树(trie),实现了增删改查等功能,它说摘要必须大于50字我还能说啥啥啥啥
Trie树是搜索树的一种,来自英文单词"Retrieval"的简写,可以建立有效的数据检索组织结构,是中文匹配分词算法中词典的一种常见实现。它本质上是一个确定的有限状态自动机(DFA),每个节点代表自动机的一个状态。在...
首先,我们要理解什么是Trie树,也被称为前缀树或字典树。Trie树是一种特殊的树形数据结构,用于存储一个字符串集合。它的特点是每个节点代表一个字符串的前缀,根节点不包含任何字符,而叶节点则表示完整的单词。...
Trie树,也被称为前缀树或字典树,是一种数据结构,主要用于高效地存储和检索字符串。在Trie树中,每个节点代表一个字符串的前缀,而从根节点到某个节点的路径上的边代表了这个节点所代表的字符串。这种结构特别适合...
Trie树,又称为字典树,是一种特殊的树形数据结构,主要用于高效地存储和检索字符串。它的设计目的是通过利用字符串的公共前缀来减少字符串比较的次数,从而提高查询效率。Trie树的核心特点是: 1. 根节点不包含...
什么是Trie树 Trie树通常又称为字典树、单词查找树或前缀树,是一种用于快速检索的多叉树结构。如图数字的字典是一个10叉树: 同理小写英文字母或大写英文字母的字典数是一个26叉树。如上图可知,Trie树的根结点是...