2016-07-01 8 views
-1

Pythonでバイナリツリーの実装を作成しようとしていますが、再帰を使用して子ノードを追加する際にエラーが発生しています。私はめったにPythonを使用せず、addChild()に4つの引数が与えられた場所を理解できませんでした。私の理解によれば、関数プロトタイプと同じ3つしか与えていません。他の関数の実装は無視してください。バイナリツリーにノードを挿入中にPythonエラーが発生しました

はここに私のコードです:

Traceback (most recent call last): 
    File "z.py", line 50, in <module> 
    obj.addChild(12, "hari") 
    File "z.py", line 42, in addChild 
    self.addChild(current.get_rightChild(), key, value) 
TypeError: addChild() takes exactly 3 arguments (4 given) 

class Node: 
    def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None): 
     self.key = key 
     self.value = value 
     self.leftchild = leftChild 
     self.rightChild = rightChild 
     self.parent = parent 

    def get_key(self): 
     return self.key 

    def get_value(self): 
     return self.value 

    def get_leftChild(self): 
     return self.leftChild  

    def get_rightChild(self): 
     return self.rightChild 

    def get_parent(self): 
     pass 

    def isLeaf(self): 
     pass 

    def isRoot(self): 
     pass 

class BinaryTree: 
    def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None): 
     self.root = Node(key, value, leftChild = None, rightChild = None, parent = None) 

    def addChild(self, key, value): 
     if self.root is None: 
      self.root = Node(key, value, leftChild = None, rightChild = None, parent = None) 
     else: 
      current = self.root 
      if current is None: 
       current = Node(key = None, value = None, leftChild = None, rightChild = None, parent = None) 
      elif current.get_key() < key: 
        self.addChild(current.get_rightChild(), key, value) 
      elif current.get_key() > key:     
        self.addChild(current.get_leftChild(), key, value) 




obj = BinaryTree(10, "ram") 
obj.addChild(12, "hari") 
+0

あなたのコードを簡素化するための小さなヒント:は、これであなたのaddChildメソッドを置き換えるツリーは、再帰的な構造です - ルートの子供たちはまた、木のように扱うことができます。 current.get_leftChild() arg2に - - キー ARG3 - すべてのクラスメソッドの値 – GingerPlusPlus

答えて

0

あなたaddChild方法は、(self含む)の3つの引数を取りますが、あなたはそれを(self含む)4つの引数を渡しています。

変更:

def addChild(self, key, value): 

へ:

def addChild(self, rightChild, key, value): 

すなわち、キーの前に1つの以上のパラメータを追加します。

あなたがこののcuzのエラーを取得している

UPDATE:

class BinaryTree: 
    def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None): 
     self.root = Node(key, value, leftChild = None, rightChild = None, parent = None) 

    def addChild(self, key, value): 
     if self.root is None: 
      self.root = Node(key, value, leftChild = None, rightChild = None, parent = None) 
     else: 
      current = self.root 
      if current is None: 
       current = Node(key = None, value = None, leftChild = None, rightChild = None, parent = None) 
      elif current.get_key() < key: 

self.addChild(current.get_rightChild(), key, value) #error here given 4 params

  elif current.get_key() > key:     

self.addChild(current.get_leftChild(), key, value) #error here given 4 params

UPDATE 2

def addChild(self, key, value): 
    if self.root is None : 
     self.root = Node(key, value, leftChild = None, rightChild = None, parent = None) 
    else: 
     self._addChild(self.root, key, value) 

def _addChild(self, node, key, value): 
    if(value < node.get_key()): 
     if(node.leftChild != None): 
      self._addChild(value, node.leftChild) 
     else: 
      node.leftChild = Node(key, value, leftChild = None, rightChild = None, parent = node) 
    else: 
     if(node.rightChild != None): 
      self._addChild(value, node.rightChild) 
     else: 
      node.rightChild = Node(key, value, leftChild = None, rightChild = None, parent = node) 
+0

は私がself.addChildでのみ木引数を与えている(current.get_leftChild()、キー、値) ARG1を取得できませんでしたPythonでは、クラスの現在のインスタンスへの参照です。 – Ravi

+0

最初の引数申し訳ありません –

+0

だから 'self.addChild(current.get_leftChild()、key、value)'を呼び出すときには 'addChild(self、current.get_leftChild()、key、value)' –

関連する問題