2013-11-01 117 views
0

我想返回二進制樹中的值列表。 有沒有一種更短,更有效的方法來編寫數字的方法?有沒有更簡單的方法來編寫這段代碼?

謝謝。

class BTNode(object): 
    """A node in a binary tree.""" 

    def __init__(self, item, left=None, right=None): 
     """(BTNode, object, BTNode, BTNode) -> NoneType 
     Initialize this node to store item and have children left and right, 
     as well as depth 0. 
     """ 
     self.item = item 
     self.left = left 
     self.right = right 
     self.depth = 0 # the depth of this node in a tree 

    def number(self) -> list: 
     lst = [] 

     if self.right is None and self.left is None: 
      lst.append(self.item) 
     else: 
      lst.append(self.item) 
     if self.left: 
      left = self.left.number() 
      lst.extend(left) 
     if self.right: 
      right = self.right.number() 
      lst.extend(right) 
     return lst 
+0

這是什麼語言? – Ergin

+0

看起來像蟒蛇。你真的需要def數中的第一個if語句嗎?當時和其他部分看起來都一樣。 – cup

+1

爲什麼不嘗試http://codegolf.stackexchange.com/或http://codereview.stackexchange.com/?這個問題似乎更適合那些網站。 – istovatis

回答

3

如果您不介意生成器而不是列表,則可以非常整齊地編寫代碼。

def number(self): 
    yield self.item 
    for child in self.left, self.right: 
     if child: yield from child.number() 

我從來沒有見過Python中的類型註釋。這是一個Python 3的東西嗎?

+0

我發現這(類型註釋):http://www.python.org/ dev/peps/pep-3107/ – utdemir

+0

我只知道Python 3支持這種類型的註釋。我的一些教師更喜歡這種方式,所以我也採用了這種註釋方式。順便說一句,你知道另一種方法來實現這種方法,而不使用生成器?謝謝! – muros

+0

'def number_list(self):return list(self.number())' –

0

我有一個非遞歸迭代器在 https://pypi.python.org/pypi/treap

在樹上(樹堆)返回的值從一個迭代器列表中得到的是隻是一個包裝像列表迭代器的事情(它() )

最後我聽說'收益'很慢。

相關問題