2017-07-22 3 views
1

Ich schrieb diesen Code, um Präfix Baum zu testen, aber aus irgendeinem Grund bekomme ich den Fehler "TrieNode" -Objekt ist nicht aufrufbar. Könnte jemand mir helfen, diesen Fehler zu beheben?TypeError: "'TrieNode' -Objekt kann nicht aufgerufen werden" - Was ist falsch an meinem Code?

Warum ist die Klasse TrieNode() nicht aufrufbar? >root dort -

# 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

Veröffentlichen Sie den vollständigen Fehler, einschließlich der * Stack-Trace * –

+2

'node = self.root()' ist Ihr Fehler. 'self.root' ist bereits eine TrieNode-Instanz und Sie versuchen, das zu nennen. –

+1

Ich rate von hier aus: 'node = self.root()', aber * warum * würdest du dingen, dass TrieNode-Instanzen aufrufbar sind? –

Antwort

1

Es sollte

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

beobachten die root() lesen. Sie rufen gerade ein Instanzattribut auf, während Sie tatsächlich nur einen Verweis darauf erhalten möchten.

+0

Vielen Dank @ user272298, behoben. Es war ein Tippfehler auf meiner Seite und ich wollte root nicht zuweisen() – Santhosh

Verwandte Themen