我希望能够通过使用节点递归地找到二叉树中所有叶子的总和,到目前为止我有:
class BTNode:
"""A node in a binary tree."""
def __init__(self: 'BTNode', item: object,
left: 'BTNode' =None, right: 'BTNode' =None) -> None:
"""Initialize this node.
"""
self.item, self.left, self.right = item, left, right
def __repr__(self):
return 'BTNode({}, {}, {})'.format(repr(self.item),
repr(self.left), repr(self.right))
def is_leaf(self: 'BTNode') -> bool:
return not self.left and not self.right
def tree_sum(t: BTNode) -> int:
'''Return the sum of the leaves in t.
>>> t = BTNode(None, BTNode(8), BTNode(9))
>>> tree_sum(t)
17
'''
sm = 0
t1 = t.left.item
t2 = t.right.item
if not t.left or not t.right:
return 0
if t.left.is_leaf() and t.right.is_leaf():
sm = t1 + t2 + tree_sum(t.left) + tree_sum(t.right)
return sm
函数tree_sum(t)我没有用,我很难找到一种有效的方法。我做错了什么?
答案 0 :(得分:0)
你遗漏了一小部分代码。
由于t.left
和t.right
None
如果t
是一片树叶,行t1 = t.left.item
和t2 = t.right.item
会引发AttributeError
1}}。
您需要考虑到这一点:
t1 = t.left.item if t.left else None
t2 = t.right.item if t.right else None
然后
t = BTNode(None, BTNode(8), BTNode(9))
print(tree_sum(t))
产生正确的结果(17)。
那说,这个函数将不返回所有叶子的总和(即在多级树的情况下它不会遍历整个树) )。