题目
难度:★★☆☆☆
类型:二叉树
计算给定二叉树的所有左叶子之和。
示例
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。
解答
二叉树问题常常使用递归方法,寻找所有左叶子结点之和,这道题目的难点在于左叶子结点的判断,我们设计一个函数,实现计算一棵二叉树上所有左叶子结点之和的功能:
判断当前输入结点是否为空,如果为空,这几返回零;
判断当前输入结点的左子树是否为叶子结点:
(1)如果是,则返回左叶子结点上的数值与右子树上所有左叶子结点的和(递归调用本函数计算);
(2)如果不是,那么返回左子树和右子树上所有左叶子结点之和;
class Solution:
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root: # 输入结点为空
return 0 # 返回零
if root.left and not root.left.left and not root.left.right: # 输入结点的左子树是叶子结点
return root.left.val+self.sumOfLeftLeaves(root.right) # 左叶子结点+右子树上的左叶子结点之和
else: # 否则
return self.sumOfLeftLeaves(root.left)+self.sumOfLeftLeaves(root.right) # 返回左右子树上的左叶子结点之和
如有疑问或建议,欢迎评论区留言~