2013-02-11 80 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