┎结构之美┒之Trie树

本文探讨了Trie树(又称字典树、前缀树、单词查找树、键树)这一数据结构,介绍了其特点和应用场景,如单词查找、去除重复单词、统计频率、查找最长公共前缀及字符串排序。还讨论了节点存储方式,包括固定数组和动态链表两种实现方式。
摘要由CSDN通过智能技术生成

博主今天新开一系列写“结构”,简单的单链表,普通队列,普通栈,普通二叉树就不写了,今天从Trie树写起。

Trie树(又叫字典树,前缀树,单词查找树,键树)是一种树形数据结构,直接来看图:


我们来看看Trie树的特点:根节点为空值,剩下每一个节点保存一个字母。知道这些就够了!

我们再来看看这棵树能干什么?如果从根节点遍历到某一个节点把路径节点的值连在一起就构成了一个字符串,利用这个特点很容易想到这棵树的第一个功能能帮我们查找某一个单词是否在树中(需要在每一个节点设置一个标志,表示从根节点到此节点是否构成一个单词);如果该单词存在,我们可以利用它实现第二个功能:去除重复单词;同样如果该词存,在我们还可以看出它的第三个功能:统计单词频率;因为这是一个树形结构我们利用这个特点很容易看出它的第四个功能能帮我们查找N个单词的最长公共前缀;如果我们按顺序遍历输出整棵树,发现它的第五个功能:对字符串排序


这棵树创建看起来比较容易,就有一个问题需要我们考虑:父节点如何保存孩子节点? 主要有两种方式供大家参考:

1.因为是英文字符,我们可以用Node[26]来保存孩子节点(如果是数字我们可以用Node[10]),这种方式最快,但是并不是所有节点都会有很多孩子,所以这种方式浪费的空间太多

2.用一个链表根据需要动态添加节点。这样我们就可以省下不小的空间,但是缺点是搜索的时候需要遍历这个链表,增加了时间复杂度。


下面我用数组保存孩子节点的方式实现的trie树:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值