Mysql前缀树_前缀树 - 一种好玩的树型数据结构

上篇内容有在介绍 Gin 的路由实现时提到了前缀树,这次我们稍微深入探究一下前缀树的实现。

本文以一道编程题为例,讲述前缀树的实现,以及前缀树的一种优化形态压缩前缀树。

MapSum 问题

LeetCode 上有一道编程题是这样的

实现一个 MapSum 类里的两个方法,insert 和 sum。

对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。

对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。

示例 1:

输入: insert("apple", 3), 输出: Null

输入: sum("ap"), 输出: 3

输入: insert("app", 2), 输出: Null

输入: sum("ap"), 输出: 5

前缀树

根据题意,我们定义的 MapSum 的数据结构为:

type MapSum struct {

char byte

children map[byte]*MapSum

val int

}

/** Initialize your data structure here. */

func Constructor() MapSum {

}

func (this *MapSum) Insert(key string, val int) {

}

func (this *MapSum) Sum(prefix string) int {

}

假设输入数据为:

m := Constructor()

m.Insert("inter", 1)

m.Insert("inner", 2)

m.Insert("in", 2)

m.Insert("if", 4)

m.Insert("game", 8)

则构造

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值