我正在嘗試創建一個二叉搜索樹,但它給了我一個TypeError
。我如何將第二個參數(node
)作爲對象本身傳遞給insert()
,因爲第一個參數(self
)始終是BSTNode
的實例。無效的參數數量(TypeError),儘管給出的確切參數
# Binary Search Tree
# Create a BST and insert elements and print Inorder traversal
class BSTNode(object):
def __init__(self, key, left=None, right=None):
self.left = left
self.right = right
self.key = key
@property
def insert(self, node, key):
if node is None:
return BSTNode(key)
elif key < node.key:
node.left = insert(node.left, key)
elif key > node.key:
node.right = insert(node.right, key)
return node
@property
def inorder(root):
if root:
inorder(root.left)
print(root.key)
inorder(root.right)
if __name__ == "__main__":
bst = BSTNode(50)
bst.insert(bst, 30)
bst.insert(bst, 20)
bst.insert(bst, 40)
bst.insert(bst, 70)
bst.insert(bst, 60)
bst.insert(bst, 80)
inorder(root)
的我多少參數傳遞給insert()
沒關係,上面的代碼給出了同樣的錯誤:
Traceback (most recent call last):
File "bst.py", line 31, in <module>
bst.insert(root, 30)
TypeError: insert() takes exactly 3 arguments (1 given)
這是什麼,到底,你認爲'@ property'呢?你根本沒有正確使用它。 – jonrsharpe
只要刪除'@ property'修飾符。屬性是一個聲明爲getter的函數,它接受一個參數:'self'並返回屬性的值。好處是能夠調用'val = obj.prop'而不是'val = obj.prop()',因此掩蓋了屬性被計算而不是固定值的事實。 – Cilyan
在不正確的'@ property'用法之上,python中的方法調用需要'self'前綴。使用'self.insert()'和'self.inorder()'。 –