2016-04-07 21 views
0

Python 3.5.0'da bir ikili ağaç yapıyorum ve bunun için ekleme işlevini yapıyorum. Ben kendi içinde tree_insert çağırdığınızda Ama bana bu hata veriyor bir sorun nedeniyle biraz çalıştırıyorum: test üzerinePython özyinelemeli fonksiyon tanımlanmamış mı?

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) 

ayrıca ben özyinelemeli fonksiyonlar sadece çalışmaz öğrendim. Emin olmak için aşağıdaki kodu denedim ama bana aynı hata verdi:

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

kimse onu çok takdir :)

cevap

1

tree_insert() bir instance method olduğunu bana doğru yönde işaret edebilir, self.tree_insert() aracılığıyla diyoruz:

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

biraz uyumaya ihtiyacım ... çok teşekkür ederim –