2013-02-11 78 views
0

我要爲自定義系統發育樹類實現一個長度方法,因此我們可以在其上調用len(TreeObject)。樹的長度由它的葉子數決定。葉子意味着節點沒有孩子。 'self.children'等於節點子節點的元組(節點,權重)列表。我非常接近,我相信:遞歸在Python中導航樹

def __len__(self): 

# everytime it reaches the base case I should add 1 
    if self.isLeaf(): 
     print('base case - reached leaf!') 
     return 1 

    for t,w in self.children: 
     print('not leaf so sent through loop') 
     numLeaves = len(t) 

    return numLeaves 

該代碼正在達到if語句的正確次數,例如,如果長度爲3,則輸出「基本情況 - 到達葉子!」 3個不同的時間。我只需要一種將這些加在一起並將其存儲在變量中的方法。

回答

2

確實非常接近。你只是覆蓋numLeaves,而不是對它們求和的:

numLeaves = 0 
for t,w in self.children: 
    print('not leaf so sent through loop') 
    numLeaves += len(t) 

也可以不同的方式實現:

sum(len(t) for (t,w) in self.children) 
+0

太感謝你了。 idk我怎麼沒有早點看到。也欣賞更優雅的蟒蛇位,謝謝。 – logeyg 2013-02-11 22:11:21