class Node:
def __init__(self, v):
self.l = None
self.r = None
self.v = v
class BinaryTree:
def __init__(self):
self.root = None
def put(self, v):
if self.root is None:
self.root = Node(v)
else:
if self.root is None:
self.root = Node(v)
elif self.root.v <= v:
self.root.r = self.put(self.root.r, v)
elif self.root.v > v:
self.root.l = self.put(self.root.l, v)
return self.root
def __contains__(self, v):
return finns(self.root, v)
def write(self):
if self.root is not None:
print(self.root.v)
if self.root.l is not None:
self.write(self.root.l)
if self.root.r is not None:
self.write(self.root.r)
a = BinaryTree()
a.put(3)
a.put(4)
a.write()
なぜ動作しないのでしょうか?それは言う:バイナリツリーを実装する際の問題
TypeError: put() takes 2 positional arguments but 3 were given
私はちょうどツリーに入力整数にput()
を使用します。あなたは2つの明示的な引数を持つインスタンスメソッドを呼び出すput
self.root.r = self.put(self.root.r, v)
ラインで
次の2つの引数、 'self.root.r'と' v'と 'self.put'呼び出します。それはあまりにも多くの議論です。 – chepner
'put'の前に' self'を削除して、別のオブジェクトから呼び出せます。 –
'self.put(self.root.r、v)'と記述します。ここでは2つのパラメータを明示的に入力します(3つ目は 'self'です)。しかし、あなたの 'put'は2つ(暗黙的に)と1つ(明示的に)しか期待していません。 –