当我尝试运行add_word方法(简化为专注于发生问题的区域)时,我遇到了一个奇怪的问题。如果尝试在单词trie中添加单词“ mud”,则将成功创建节点,但其子节点除外。由于某种原因,我所有的节点都共享同一个子字典,而我无法弄清楚是什么原因造成的。每当我向特里添加新字母时,我都会创建一个新的TrieNode,这应该为每个孩子提供一个独立的children字典。
我正在使用python 3.5
知道我在弄乱我的指针吗?

class Trie:
    """Simple Trie Datastructure"""
    def __init__(self, root_val=""):
        self.root = TrieNode(root_val)

    def add_word(self, string):
        current = self.root
        for letter in string:
            new_entry = TrieNode(letter)
            current.children[letter] = new_entry
            current = new_entry

class TrieNode:
    """A Trie Node"""
    def __init__(self, data, children={}):
        self.data = data
        self.children = children

最佳答案

罪魁祸首在您的TrieNode __init__中。将默认参数设置为dict / list将导致所有不带参数的调用都使用同一实例。最简单的解决方案是将方法更改为def __init__(self, data, children=None):,并将赋值更改为self.children = {} if children is None else children

关于python - 无法在遍历遍历时重设字典指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33246883/

10-13 04:43