在Python中递归浏览树

时间:2013-02-11 21:57:31

标签: python recursion

我将为自定义的Phylogenetic Tree类实现一个length方法,以便我们可以在其上调用len(TreeObject)。树的长度由它有多少叶子定义。叶子表示节点没有子节点。 'self.children'等于该节点子节点的元组(节点,权重)列表。我相信我非常接近:

 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个单独的时间。我只需要一种方法将它们加在一起并将其存储在变量中。

1 个答案:

答案 0 :(得分: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)