如何递归获取树的大小?

时间:2014-12-11 04:39:33

标签: python recursion tree

class EmptyValue:

   pass

class Tree:

    def __init__(self, root = EmptyValue):
        self.root = root
        self.subtrees = []

    def is_empty():
        self.root = EmptyValue

    def size(self, a = None):

        for subtree in self.subtrees:
            if isinstance(subtree,Tree):
                if subtree.subtrees == []:
                    a+=1
                else:
                    a+=1    
                    return(subtree.size(a))
            else:
                a+=1
        return(a)

我试图计算这棵树中的项目数量,但是在这种情况下它会被卡住。

a =树(5)

b =树(6)

b.subtrees = [1,2,3]

a.subtrees = [树(11),树(5),树(3),b,树(4),树(12)]

print(a.size())#应该打印10,给出8

我认为循环停在b处并且与b的子树本身有关,而不是树本身,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

你的size定义比它需要的更复杂 - 并且复杂性隐藏了错误:

def size(self, a=1):
    for subtree in self.subtrees:
        if isinstance(subtree,Tree):
            a += subtree.size()
        else:
            a += 1
    return(a)

请特别注意,我们只有一个return点 - 在评估所有子树之后,而旧代码允许return在任何时候发生在这个过程中,意味着以后的孩子不会被考虑。