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的子树本身有关,而不是树本身,任何帮助都会非常感激。
答案 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
在任何时候发生在这个过程中,意味着以后的孩子不会被考虑。