python - 类型错误:__init__() 缺少 1 个必需的位置参数:“值”
问题描述
我知道我需要一个 TernaryTree() 的实例最初为空,直到它通过 generate_tree() 方法使用列表 L 中的值。尝试了各种方法,但不确定从这里去哪里。我需要添加什么才能获得通过的价值?
class TernaryTree(object):
def __init__(self, value):
self.value = value
self.left = None
self.right = None
self.mid = None
def insert_node(self, new_value):
if new_value <= self.value: #check if value is lower
if self.left == None: #if value is none
self.left = TernaryTree(new_value) #add in node value
else:
self.left.insert_node(new_value) #go left place node value
elif new_value == self.value: #check if value is the same
if self.mid == None:
self.mid = TernaryTree(new_value)
else:
self.mid.insert_node(new_value)
else: #case when new_value > self.value:
if self.right == None:
self.right = TernaryTree(new_value)
else:
self.right.insert_node(new_value)
def traverse_LMRW(self):
if self.left != None: #alternatively, if self.left:
self.left.traverse_LMRW() #go a level deeper
if self.mid != None:
self.mid.traverse_LMRW()
if self.right != None: #if node on right is not None!
self.right.traverse_LMRW() #go a level deeper
print(self.value)
def leaf_count(self):
if self is None:
return 0
if(self.left is None and self.right is None):
return 1
else:
return leaf_count(self.left) + leaf_count(self.right)
def generate_tree(L):
T = TernaryTree(L[0]) #first element in our list is the root by default
for value in L[1:]:
T.insert_node(value)
return T
def main():
L = [4,1,2,2,3,1,0,4,6,5,6,4]
T = TernaryTree()
T.generate_tree(L)
T.traverse_LMRW()
T.leaf_count()
main()
解决方案
根据您的代码generate_tree
不是实例方法。所以从类缩进中缩进它。并从那里将其称为 python 函数,它将创建TernaryTree
.
在 main 中,您创建的实例TernaryTree
没有构造函数中所需的任何初始值__init__
。
更新代码将是:
class TernaryTree(object):
def __init__(self, value):
self.value = value
self.left = None
self.right = None
self.mid = None
def insert_node(self, new_value):
if new_value <= self.value: #check if value is lower
if self.left == None: #if value is none
self.left = TernaryTree(new_value) #add in node value
else:
self.left.insert_node(new_value) #go left place node value
elif new_value == self.value: #check if value is the same
if self.mid == None:
self.mid = TernaryTree(new_value)
else:
self.mid.insert_node(new_value)
else: #case when new_value > self.value:
if self.right == None:
self.right = TernaryTree(new_value)
else:
self.right.insert_node(new_value)
def traverse_LMRW(self):
if self.left != None: #alternatively, if self.left:
self.left.traverse_LMRW() #go a level deeper
if self.mid != None:
self.mid.traverse_LMRW()
if self.right != None: #if node on right is not None!
self.right.traverse_LMRW() #go a level deeper
print(self.value)
def leaf_count(self):
if self is None:
return 0
if(self.left is None and self.right is None):
return 1
else:
return leaf_count(self.left) + leaf_count(self.right)
def generate_tree(L):
T = TernaryTree(L[0]) #first element in our list is the root by default
for value in L[1:]:
T.insert_node(value)
return T
def main():
L = [4,1,2,2,3,1,0,4,6,5,6,4]
T = generate_tree(L)
T.traverse_LMRW()
T.leaf_count()
main()
推荐阅读
- scala - 在 Spark 数据框的列中为每个组添加递增的数字
- c# - 通过检查器窗口设置四元数
- java - 从 xsd 模式生成源的问题
- swift - 以编程方式迭代 UIProgressView 动画 - Swift
- javascript - 未捕获的 SyntaxError:将 javascript 添加到 wpcf7 时出现意外的标记“<”
- c++ - 为什么在重载 << 运算符时 const 字不与 ostream 对象一起使用?
- javascript - 用于简单游戏的 AI 机器人
- c - 用 && 和 || 怎么分叉 运营商工作?
- reactjs - 来自 GraphQL 的动态数据的材质 UI 卡渲染问题
- javascript - 使用 JS 查找字段并从中生成对象