字典树Trie,又称为前缀树Prefix tree,是一个26叉树,用于在一个集合中检索一个字符串,或者字符串前缀。

Trie树的两个部分:
- Node类
- 判断当前节点是否是某个字符串的结尾
- 根据字符,查找后继节点
- 类方法
- 插入字符串
- 字符串查询
代码
class Node:def __init__(self, is_leaf=False):self.chicd = {}self._is_leaf = is_leaf@propertydef is_leaf(self):return self._is_leaf@is_leaf.setterdef is_leaf(self, is_leaf):self._is_leaf = is_leafdef put(self, key, value):self.chicd[key] = valuedef get_next_node(self, _str):if len(_str) != 1:return Nonereturn self.chicd.get(_str, None)def get_node(self, key):return self.chicd.get(key, None)class Trie:def __init__(self):self.root = Node()def insert(self, _str):cur = self.rootfor c in _str:if cur.get_next_node(c) is None:cur.put(c, Node())cur = cur.get_node(c)else:cur = cur.get_next_node(c)cur.is_leaf = Truedef query(self, _str):cur = self.rootfor c in _str:if cur.get_next_node(c) is None:return Falsecur = cur.get_next_node(c)return cur.is_leafif __name__ == "__main__":trie = Trie()trie.insert('abcda')trie.insert('absde')trie.insert('eecdab')trie.insert('wemo')trie.insert('azhu')print(trie.query('wemo'))print(trie.query('ab'))print(trie.query('jun'))

