python 在二叉树中插入节点时出错

python error while inserting node in binary tree

我正在尝试在 python 中编写二叉树实现,但在使用递归添加子节点时出现错误。我很少使用 python 并且无法理解 addChild() 在哪里给出了 4 个参数。根据我的理解,我只给出了 3 个与函数原型相同的。请忽略其他功能实现。

这是我的代码:

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")

您的 addChild 方法有 3 个参数(包括 self),但您向它传递了 4 个参数(包括 self)。

变化:

def addChild(self, key, value):

至:

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

即在key前多加一个参数

更新

您收到以下错误:

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

更新 2

将您的 addChild 方法替换为:

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)