0

有一个关于二叉树类的例子。

首先我定义类树。

>>> class Tree(object):
>>>     def __init__(self, data=None, left=None, right=None):
>>>         self.data = data
>>>         self.left = left
>>>         self.right = right
>>>     def inorder(self):
>>>         if self.left:
>>>             for x in self.left.inorder():
>>>                 yield x
>>>             yield self
>>>         if self.right:
>>>             for x in self.right.inorder():
>>>                 yield x
>>>     def __iter__(self):
>>>         return self.inorder()
>>>     def __repr__(self, level=0, indent="     "):
>>>         s = level*indent + `self.data`
>>>         if self.left:
>>>             s = s + "\n" + self.left.__repr__(level+1, indent) # *** Right this point ***
>>>         if self.right:
>>>             s = s + "\n" + self.right.__repr__(level+1, indent)
>>>         return s

然后定义函数“树”

>>> def tree(List):
>>>     n = len(List)
>>>     if n == 0:
>>>         return None
>>>     i = n / 2
>>>     return Tree(List[i], tree(List[:i]), tree(List[i+1:]))

最后打印二叉树

>>> t = tree('abcdef')
>>> print t

结果如下所示。

'd'
     'b'
          'a'
          'c'
     'f'
          'e'

问题是为什么不在我指出的repr方法中插入“self” 。

self.left 是实例,因此可以不将'self'放入_repr _method?

提前致谢 :)

4

1 回答 1

1

self.left是该类的另一个实例。Tree

树中的每个元素都有两个“子”节点,self.left并且仅将这些节点self.right__repr__打印直接委托给节点本身,并带有可配置的缩进。

通常,您会调用repr(self.left),而 Python 会依次调用self.left.__repr__(),但这不会让您选择传入缩进级别;所以这个代码直接调用self.left.__repr__()

于 2013-08-21T07:26:39.400 回答