python字典树

字典树的节点结构:

class tritree:
    def __init__(self):
        self.dicts={}
        self.isWord=False

将一个单词加入到字典树,首先我们看这个单词当前字母是否在当前节点的字典中,若不在则生成一个节点,让它对应当前字母,即是将当前字母加入到当前节点的字典中,然后进入下一个节点,若当前字母在当前节点的字典中,则直接进入到下一个节点,当单词遍历完毕,将isWord标记置为True,表示单词存在:

def insert(word, treeNode):
    for s in word:
        if s not in treeNode.dicts:
            treeNode.dicts[s]=tritree()
        treeNode=treeNode.dicts[s]
    treeNode.isWord=True

根据前缀查找单词,如前查找,当前缀中的当前字母不在当前节点的字典中时,说明当前字典树不存在该前缀的单词,直接返回空,若前缀查找完毕,那么对于剩下的部分直接进行dfs即可(dfs写的有点丑陋),一旦遇到isWord为True则加入到列表中:

def dfs(nodes,strs):
    ret=[]
    if nodes.isWord == True:
        ret.append(strs)
    for s,v in nodes.dicts.items():
        tmp=strs
        tmp+=s
        ret.extend(dfs(nodes.dicts[s],tmp))
    return ret

def serch(prefix, treeNode):
    ret, strs = [], ''
    for s in prefix:
        if s not in treeNode.dicts:
            return []
        strs += s
        treeNode = treeNode.dicts[s]
    ret=dfs(treeNode, strs)
    return ret

运行效果:

obj=tritree()
insert("apple",obj)
insert("app",obj)
print(serch("aps",obj))      #[]
insert("appppppple",obj)
print(serch("ap",obj))       #['app', 'apple', 'appppppple']
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中可以使用字典(dict)数据结构来实现字典树(Trie)的存储。字典树是一种用于高效存储和检索字符串的数据结构,特别适用于需要快速查找和匹配字符串的场景。 在Python中,可以使用嵌套的字典结构来表示字典树。每个字典的键表示一个字符,而对应的值可以是另一个字典或者其他结构(如布尔值)来表示当前字符是否是一个字符串的结束。 下面是一个简单的示例代码,演示了如何使用字典树存储一些字符串: ```python class TrieNode: def __init__(self): self.children = {} self.is_end = False class Trie: def __init__(self): self.root = TrieNode() def insert(self, word): node = self.root for char in word: if char not in node.children: node.children[char] = TrieNode() node = node.children[char] node.is_end = True def search(self, word): node = self.root for char in word: if char not in node.children: return False node = node.children[char] return node.is_end # 示例用法 trie = Trie() trie.insert("apple") trie.insert("banana") print(trie.search("apple")) # 输出 True print(trie.search("banana")) # 输出 True print(trie.search("orange")) # 输出 False ``` 在上面的代码中,TrieNode类表示字典树的节点,包含了一个children字典来存储子节点,以及一个is_end布尔值来标记当前节点是否是一个字符串的结束。 Trie类表示整个字典树,包含了一个根节点root。insert方法用于插入一个字符串到字典树中,search方法用于搜索一个字符串是否存在于字典树中。 希望以上代码能帮助你理解如何使用字典来实现字典树的存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值