数据结构-Trie树(前缀树、字典树)Go语言

数据结构-Trie树(前缀树、字典树)Go语言

Trie树简介

Trie树(前缀树)是一个可以快速插入与查询字符串前缀的字典树。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

如图在Trie树插入"apple","appal","app","banana"4个字符串,红色节点表示结尾。

image-20220707201318983

Go语言版本的Trie树我们需要关注结点的定义:

image-20220707203500057

代码实现

208. 实现 Trie (前缀树)
// Trie数(结点)
type Trie struct {
    Next [26]*Trie
    isEnd bool
}

// 构造函数
func Constructor() Trie {
    return Trie{}
}

// 插入
func (this *Trie) Insert(word string)  {
    node := this
    for _,c := range word {
        c -= 'a'
        if node.Next[c] == nil {
            node.Next[c] = &Trie{}
        }
        node = node.Next[c]
    }
    node.isEnd = true
}

// 获取结点
func (this *Trie) SearchNode(str string) *Trie {
    node := this
    for _,c := range str {
        c -= 'a'
        if node.Next[c] == nil {
            return nil
        }
        node = node.Next[c]
    }
    return node
}

// 查询
func (this *Trie) Search(word string) bool {
    node := this.SearchNode(word)
    return node != nil && node.isEnd
}

// 前缀查询
func (this *Trie) StartsWith(prefix string) bool {
    return this.SearchNode(prefix) != nil
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值