数据结构:Trie树(字典树)

本文详细介绍了Trie树的概念、二维数组实现方法,包括插入和查询操作,并给出了一个字符串统计的例题。Trie树适用于高效存储和查找字符串,尤其在处理小写英文字母问题上表现突出。

1.何为Trie树

     Trie树,又叫字典树前缀树,是用来高效存储和查询字符串的数据结构,是一种多叉树

 

     上图就是一棵Trie树,表示了字符串的集合{"f","ab","ace","acd","cgm"},一棵Trie树应该是这样的:

1.根节点不存储字符,除此之外每一个子节点都有一个字符
2.从根节点到某一个结点连起来的路径就是该节点对应的字符串
3.每个节点的子节点存储的字符各不相同
4.Trie树不一定是二叉树,它是一种多叉树结构

2.Trie树的实现

     Trie树我们选择用二维数组来模拟实现,首先定义一个son数组,为了知道每个字符串是否存在,我们在最后的每个节点处做了标记,定义一个cnt[p]数组来记录,最后再定义一个idx下标,来表示每个节点

const int N=100010;
int son[N][26],cnt[p],idx;
//son[][]存储树中每个节点的子节点
//cnt[]存储以每个节点结尾的单词数量

     初始时p=0,idx=0,p=0表示此时Trie树为空,p在这里就相当于一个指针;而这里的son数组有两个维度,其中N是代表现在所处的节点位置,而后面的26则是代表当前所在节点的子节点都有26个字母的哪些字母,idx是下标,例如son[0] [0]表示当前在根节点上,它有一个子节点,其中存储了字符a。

  &nbs

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c++机械师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值