前缀树,也称为字典树,是一种树形数据结构。它的核心思想是利用字符串的公共前缀来减少存储空间和提高查询效率。它由节点组成,每个节点包含多个指向子节点的指针(通常是一个固定大小的数组或者是一个哈希表),以及一个标记位用于表示从根节点到该节点是否构成一个完整的字符串。
class TrieNode:
def __init__(self):
self.children = [None] * 26
self.value = 0
class MapSum:
def __init__(self):
"""
Initialize your data structure here.
"""
self.root = TrieNode()
def insert(self, key: str, val: int) -> None:
curNode = self.root
for char in key:
idx = ord(char) - ord("a")
if not curNode.children[idx]:
curNode.children[idx] = TrieNode()
curNode = curNode.children[idx]
curNode.value = val
def _dfs(self, node):
curNode, res = node, node.value
for child in curNode.children:
if child:
res += self._dfs(child)
return res
def sum(self, prefix: str) -> int:
curNode = self.root
for char in prefix:
idx = ord(char) - ord("a")
if curNode.children[idx]:
curNode = curNode.children[idx]
else:
return 0
return self._dfs(curNode)