2017-07-22 22 views
1

我写了这段代码来测试前缀树,但由于某种原因,我得到错误“TrieNode”对象不可调用。有人能帮我解决这个错误吗?TypeError:“'TrieNode'对象无法调用” - 我的代码出了什么问题?

为什么TrieNode()类不可调用?

# Prefix Tree or Trie Data Structure 
class TrieNode(object): 
    def __init__(self): 
     self.children = {} 
     self.endOfWord = False 

class Trie(object): 
    def __init__(self): 
     self.root = TrieNode() 

def insert(self,word): 
    node = self.root() 
    for w in word: 
     if w not in node.children: 
      node.children[w] = TrieNode() 
     node = node.children[w] 
    node.endOfWord = True 

def search(self,word): 
    node = self.root 
    for w in word: 
     if w not in node.children: 
      return False 
     node = node.children[w] 

    return node.endWord 

def startsWith(self,prefix): 
    node = self.root 
    for w in prefix: 
     if w not in node.children: 
      return False 
     node = node.children[w] 
    return True 

if __name__ == "__main__": 
    trie = Trie() 
    trie.insert("apple") 
    trie.insert("apples") 
    trie.insert("bat") 
    trie.insert("bate")  
    print trie.search("apple") 
+0

发布完整错误,包括*堆栈跟踪* –

+2

'node = self.root()'是您的错误。 'self.root'已经是一个TrieNode实例,你试图调用它。 –

+1

我从这里猜测:'node = self.root()',但*为什么*你会TrieNode实例可调用吗? –

回答

1

它应该阅读

def insert(self,word): 
    node = self.root 

观看root() - >root那里。您目前正在调用一个实例属性,而实际上您只想获得对它的引用。

+0

感谢@ user272298,修正了它。这是我的错字,我并不打算分配root() – Santhosh

相关问题