2013-08-21 232 views
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' 

,問題是爲什麼不將「自我」爲再版方法,其中i表示。

self.left是一個實例,它可以使'self'不可以放入_method中嗎?

在此先感謝:)

回答

1

self.leftTree類的其他實例。

樹中的每個元素都有兩個「子」節點,self.leftself.right,而__repr__僅將這些節點的打印直接委託給節點本身,並具有可配置的縮進。

通常,你會打電話來repr(self.left)和Python將依次調用self.left.__repr__(),但不給你傳遞的縮進級別的選項;所以此代碼直接調用self.left.__repr__()