二叉树搜索类

时间:2013-08-21 07:08:07

标签: python class tree

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

首先我定义了类Tree。

>>> 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

然后定义函数“tree”

>>> 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?

提前感谢:)

1 个答案:

答案 0 :(得分:1)

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

树中的每个元素都有两个“子”节点self.leftself.right,而__repr__只是将这些节点的打印直接委托给节点本身,并带有可配置的缩进。

通常,你会调用repr(self.left),然后Python会调用self.left.__repr__(),但这并不能让你选择传入缩进级别;所以此代码直接调用self.left.__repr__()