2016-04-07 17 views
0

Ich mache einen Binärbaum in Python 3.5.0 und ich mache die Einfügefunktion dafür. Aber ich bin in ein bisschen ein Problem laufen, wenn ich tree_insert in sich selbst nennen es gibt mir diese Fehlermeldung:Python nicht rekursive Funktion definiert?

File "D:/MadeUpPath/BinaryTree.py", line 10, in tree_insert

tree_insert(data, self.left)

NameError: name 'tree_insert' is not defined

class BinaryTree(): 
    def __init__(self, data): 
     self.left = None 
     self.right = None 
     self.data = data 

    def tree_insert(self, data): 
     if (data < self.data): 
      if (self.left != None): 
       tree_insert(data, self.left) 
      else: 
       self.left = BinaryTree(data) 
     else: 
      if (self.right != None): 
       tree_insert(data, self.right) 
      else: 
       self.right = BinaryTree(data) 

Bei der Untersuchung weiter fand ich heraus, dass rekursive Funktionen einfach nicht funktionieren. Ich habe versucht, den folgenden Code, um sicherzustellen, sondern gab mir den gleichen Fehler:

def factorial(n): 
    if n == 0: 
     return 1 
    else: 
     return n * factorial(n - 1) 

File "D:/MadeUpPath/BinaryTree.py", line 23, in factorial

return n * factorial(n - 1)

NameError: name 'factorial' is not defined

Wenn jemand kann mir in die richtige Richtung weisen, es wäre sehr geschätzt :)

Antwort

1

tree_insert() ist ein instance method, rufen Sie es über self.tree_insert():

class BinaryTree(): 
    def __init__(self, data): 
     self.left = None 
     self.right = None 
     self.data = data 

    def tree_insert(self, data): 
     if (data < self.data): 
      if (self.left != None): 
       self.tree_insert(data, self.left) 
      else: 
       self.left = BinaryTree(data) 
     else: 
      if (self.right != None): 
       self.tree_insert(data, self.right) 
      else: 
       self.right = BinaryTree(data) 
+0

ich brauche etwas Schlaf zu bekommen ... vielen Dank –