字典树的C++实现 Implement of trie tree

Trie,字典树,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。

 

性质:

1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。

2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。

3.每个节点的所有子节点包含的字符都不相同。

优点是查询快。对于长度为m的键值,最坏情况下只需花费O(m)的时间;而BST需要O(m log n)的时间。

 

本文用C++实现了字典树的

建立,插入,遍历,查找,删除节点,删除字典树,统计含有指定前缀的单词数等功能。

着重讲述下列功能的实现。

 

插入单词的实现:

1).设置当前节点为根节点,设置当前字符为插入字符串中的首个字符;

2).在当前节点的子节点上搜索当前字符,若存在,则将当前节点设为值为当前字符的子节点;否则新建一个值为当前字符的子节点,并将当前结点设置为新创建的节点。

3).将当前字符设置为串中的下个字符,若当前字符为0,则结束;否则转2.

4).结束时,把最后一个节点(即此时的当前节点)的isEnd设为true,对应下图中的黑色节点。表示该节点是一个单词的结尾。

 

查找单词的实现:

过程和插入单词非常类似,这里不再赘述。

 

删除单词的实现:

首先查找待删除字符串,将路径上的节点一个个入栈(本文用递归实现)。

1:若途中某个字符找不到,则不删除。

2:若到达了字符串的末尾的下一个位置,说明字符串中所有字符均找到,把包含字符串最后一个字符的那个节点设为(isEnd = false),表明到该位置不是一个单词的结尾了。

如果保存字符串中最后那个字符的节点是个叶子节点(即childCnt为0),则删除该点。

接下来便一层一层往上返回,判断当前节点是删除还是保留:

若当前节点孩子为0(childCn

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值