2017-07-14 19 views
0

我想實現一個簡單的「插入」的方法來我的樹類:AttributeError:'int'對象沒有屬性'insert';定義和調用遞歸方法

class Tree: 
     def __init__(self, value): 
     self.node = value 
     self.leftChild = None 
     self.rightChild = None 

     def insert(self, value): 
     if self.node is None: 
      self.node = value 
      return True 
     if self.node is not value: 
      if self.node > value: 
       if self.leftChild is None: 
        self.leftChild = value 
       else: 
        return self.leftChild.insert(value) 
      if self.node < value: 
       if self.rightChild is None: 
        self.rightChild = value 
       else: 
        return self.rightChild.insert(value) 
     else: 
      return False 



tree = Tree(5) 
tree.insert(6) 
tree.insert(1) 
tree.insert(10) 

上面的代碼提供了以下錯誤:

AttributeError: 'int' object has no attribute 'insert'

錯誤出現在當通過tree.insert(10)調用插入方法時,'return self.rightChild.insert(value)'這一行。

我試圖通過「回插入(self.leftChild,值)」替換錯誤路線,但是這給了我以下錯誤:

NameError: global name 'insert' is not defined

我不知道如何解決這個問題!

回答

2

您正在設置左右兒童只是value,這是一個整數。要實現遞歸結構,應該將它們設置爲新的Tree對象;這樣你可以調用他們的Tree方法。這是一個簡單的修復 - 只需使用Tree(value)而不是value

class Tree: 
     def __init__(self, value): 
     self.node = value 
     self.leftChild = None 
     self.rightChild = None 

     def insert(self, value): 
     if self.node is None: 
      self.node = value 
      return True 
     if self.node is not value: 
      if self.node > value: 
       if self.leftChild is None: 
        self.leftChild = Tree(value) 
       else: 
        return self.leftChild.insert(value) 
      if self.node < value: 
       if self.rightChild is None: 
        self.rightChild = Tree(value) 
       else: 
        return self.rightChild.insert(value) 
     else: 
      return False 



tree = Tree(5) 
tree.insert(6) 
tree.insert(1) 
tree.insert(10) 
+0

謝謝!我的道歉,如果我的問題是非常基本的,但爲什麼我們不使用同時分配值的根節點?我們只是使用 Batool

+0

每棵樹需要知道三件事情:它的左邊的孩子(它是一棵樹),它的右邊的孩子(它是一棵樹)和它的值(它只是一個數字) 。這些是三個變量對應的。如果tree.node是一棵樹,那麼這棵樹就會有一個節點,它是一棵樹,並且該樹會有一棵樹,並且我們有無限下降,並且實際上不會將值存儲在任何地方。如果您將self.node重命名爲self.value以提醒您自己它是一個數字,可能會更清楚。 – perigon

+0

把它看作一個樹形圖:self.node是小圓圈中的數字,self.leftChild和self.rightChild是左右的箭頭。 – perigon

相關問題