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)
我正在尝试在 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)