如何从下到上构建二叉树?
我正在尝试构建一棵树。我开始写了下面这段代码:
>>> class tree:
def __init__(self, charge, left=None, right=None):
self.charge = charge
self.left = left
self.right = right
>>> class tree:
def __str__(self):
return str(self.charge)
写完这段代码后,我又写了下一段:
>>> left = tree(2)
我写这个是因为我在使用的手册上说应该这么做。不过我遇到了这个错误:
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
left = tree(2)
TypeError: this constructor takes no arguments
我该如何从下往上用开头的代码来构建这棵树呢?顺便说一下,我的Python版本是2.7.2。
1 个回答
7
你正在定义一个类,然后又重新定义它。每次你写 class tree:
的时候,就会创建一个新的类定义,把之前的覆盖掉。因为最后一次定义的 tree
没有定义 __init__
方法,所以它不接受任何参数。
在交互式解释器中这样做会让事情变得复杂,因为每当你输入一个空行时,就会结束你正在进行的定义。对于类的定义,最好是编辑一个文本文件 mytree.py
,然后输入 >>> import mytree
来导入它。
另外,如果你使用的手册建议用 class foo:
来定义类,而且是关于 Python 2 的话,那这本手册就 非常旧了。在使用更新版本的 Python 2 时,你应该这样做:
class Tree(object):
def __init__(self, ...)
...
正如 delnan 指出的那样,在 Python 3 中你不需要明确地从 object
继承,所以可以把括号留空。实际上,你甚至可以完全省略它们;虽然我看到没有括号时会觉得不习惯,但 Dive Into Python 3 完全不包含它们。