我刚刚开始学习python,我正在尝试编写一个二叉搜索树。 Eclipse没有显示任何错误,但是当我尝试运行时出现ann错误
遭遇"自我"在第5行
第5行是:
" self.left = left"
有什么问题?我的编写代码的方式是什么?我刚刚出演了蟒蛇。
class Node:
def _init_(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def add_node(self, data):
if self.data is None:
node = Node(data)
self = node
if self.data > data:
self.add_node(self.left, data)
else:
self.add_node(self.right, data)
def print_nodes(self):
if self.left is not None:
self.print_nodes(self.left)
print(self);
if self.right is not None:
self.print_nodes(self.right)
def _str_(self):
print(self.data)
class binary_tree:
def _init_(self):
self.root = None
def getRoot(self):
return self.root
def add(self, data):
self.root.add_node(data)
def print_all(self):
self.root.print_nodes();
答案 0 :(得分:1)
这里有一些修复你的代码
"value": "' . $planPrice . '",
如前所述,python的特殊方法是class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def add_node(self, data):
if self.data > data:
if self.left is None:
self.left = Node(data)
else:
self.left.add_node(data)
elif self.data < data:
if self.right is None:
self.right = Node(data)
else:
self.right.add_node(data)
def print_nodes(self):
if self.left is not None:
self.left.print_nodes()
print(self);
if self.right is not None:
self.right.print_nodes()
def __str__(self):
return str(self.data)
class binary_tree:
def __init__(self):
self.root = None
def getRoot(self):
return self.root
def add(self, data):
if self.root is None:
self.root = Node(data)
else:
self.root.add_node(data)
def print_all(self):
if self.root is None:
print("Empty tree")
else:
self.root.print_nodes()
和__init__
,所有魔术方法都以__str__
开头和结尾。
我修复了你的__
,因为你的递归调用是错误的,你做add_node
自我实例隐式传递为该函数的第一个参数,self.add_node(self.left,data)
是第二个和{ {1}}第三个但是定义为add_node只接受2个参数,因此这是一个错误,因此在这种情况下,如果你想调用由self.left
完成的data
add_node
并且同样适用于对类
看看:
basic customization and magic methods
此处使用此树的示例
self.left
另外一点是,你需要在python中定义getter或setter,除非你想控制属性的设置和方式,或者以一种与实际对象不同的特殊方式返回它。
在python的IDLE中或在交互模式下以self.left.add_node
或您最喜欢的python解释器运行。