【问题标题】:Printing a binary tree打印二叉树
【发布时间】:2018-01-17 20:03:38
【问题描述】:

我刚开始使用 Python 中的类,但在尝试打印我创建的二叉树时遇到了障碍。这是我的代码:

class Node(object):
    def __init__(self, number):
        self.number=number
        self.right=None
        self.lef=None

    def add_node(self,number):
        if number < self.number:
            self.left = self.left.add_node(number)
        if number > self.number:
            self.right = self.right.add_node(number)

第一部分表示树的根,add_node 函数在树中添加一个节点。我为树的根创建了一个新实例:

树 = 节点 (6)

我面临的问题是打印树。如果我只是说print Tree,我会明白:

<__main__.Node object at 0x10f6e5210>

有人告诉我,我必须创建一个函数来实际打印树,这个函数看起来像创建一个新节点的函数,但到目前为止我还不能这样做。请帮忙?!

【问题讨论】:

  • 它看起来像add_node() 方法的线索可能是指它也是递归的——例如打印树将包括打印左右子树。

标签: python tree binary-tree


【解决方案1】:

您可以添加 __str__ 方法来确定您的节点对象在用作字符串时如何反应,即 str(Node(6)) 。如果您想在打印语句等中给出字符串表示而不直接调用方法,这将非常有用。

class Node(object):
    def __init__(self, number):
        self.number=number
        self.right=None
        self.lef=None

    def add_node(self,number):
        if number < self.number:
            self.left = self.left.add_node(number)
        if number > self.number:
            self.right = self.right.add_node(number)

    def __str__(self):
        return str(self.number)

print Node(6)

编辑:

__str__() 返回字节,__unicode__() 返回字符。 __unicode__() 实际上应该替换 __str__() ,因此实际上建议使用 __unicode__() 代替(在 Python 2.x 中,出于兼容性原因,两者都有)。

表示对象的第三种方法是__repr__(),它用于不太正式的字符串表示,而是用于调试等。返回的字符串应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象.

欲了解更多信息,请查看language reference

【讨论】:

  • 我赞成你的回答,但我认为你也应该说一下 __unicode____repr__
  • 认为这样做不会有什么坏处。已编辑。
【解决方案2】:

是的,您需要添加一个函数来创建一个函数到print 节点处的值。函数可以很简单

def dis(self):
    print(self.number)

你现在可以使用打印了

print (Tree.disp())

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多