题目
给定二叉树的根节点 root
,返回所有左叶子之和。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
示例 2:
输入: root = [1]
输出: 0
思路
遍历某节点时无法直接判断当前节点是否是左叶子节点,只能通过某节点的父节点判断某节点是否为左叶子节点。
这道题用中序或者后续都可以,但是不能用前序,因为代码中的
if root.left and not root.left.left and not root.left.right:
left = root.left.val
会去筛选出左叶子节点,如果用前序遍历,left会被递归逻辑赋值为0(因为 left = sumOfLeftLeaves(root.left)会一直遍历到最左边的节点的孩子节点,而它为空节点,应该返回0),从而产生错误。
# 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:
if not root:
return 0
left = self.sumOfLeftLeaves(root.left)
right = self.sumOfLeftLeaves(root.right)
if root.left and not root.left.left and not root.left.right:
left = root.left.val
return left + right