如何从下到上构建二叉树?

0 投票
1 回答
608 浏览
提问于 2025-04-16 21:42

我正在尝试构建一棵树。我开始写了下面这段代码:

>>> 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 完全不包含它们。

撰写回答