# 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: Optional[TreeNode]) -> int:
result = []
self.traversal(root, result)
return sum(result)
def traversal(self, root: Optional[TreeNode], result: int):
if root.left != None and not root.left.left and not root.left.right: result.append(root.left.val)
if root.left: self.traversal(root.left, result)
if root.right: self.traversal(root.right, result)
本题难点在于,如何判断左叶子节点。
只有通过左叶子节点的父节点才能判断。
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
if not root:
return 0
left_left_leaves_sum = self.sumOfLeftLeaves(root.left) # 左
right_left_leaves_sum = self.sumOfLeftLeaves(root.right) # 右
cur_left_leaf_val = 0
if root.left and not root.left.left and not root.left.right:
cur_left_leaf_val = root.left.val
return cur_left_leaf_val + left_left_leaves_sum + right_left_leaves_sum # 中
第二段代码需要注意:
求一个root的所有左叶子节点有如下三步:
1.求左子树的所有左叶子之和
2.求右子树的所有左叶子之和
3.求该root的左叶子
3者相加即可。
对每一个root都要如法炮制,这也是递归的核心思想所在;