计算给定二叉树的所有左叶子之和。
示例:
9+15=24
首先,分析左叶子到底是什么?节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。
结合完整代码进行分析:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sumOfLeftLeaves(self, root):
if root is None:
return 0
if root.left is None and root.right is None:
return 0
leftValue = self.sumOfLeftLeaves(root.left) # 左
if root.left and not root.left.left and not root.left.right: # 左子树是左叶子的情况
leftValue = root.left.val
rightValue = self.sumOfLeftLeaves(root.right) # 右
sum_val = leftValue + rightValue # 中
return sum_val
首先,判断当前节点是否为空,如果当前节点为空就返回0;判断当前节点有没有左右子节点,如果既没有左子节点也没有右子节点(说明它是一个叶子节点),也返回 0。
其次,开始递归计算左子树中的左叶子节点值的和。首先检查当前节点的左子节点是否存在,并且该左子节点没有左孩子和右孩子,如果满足条件,说明root.left是一个左叶子节点。将左子节点值赋值给leftValue。
同理计算右子树中左叶子节点的和,最后相加得到sum_val。