Skip to content

404. 左叶子之和 Easy

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

404

示例 2:
输入: root = [1]
输出: 0

解题思路

输入:二叉树的根节点 root

输出:返回所有左叶子之和

本题属于遍历二叉树 问题。

我们可以在遍历二叉树的过程向下传递是否是左子树,然后判断是否是叶子节点

既满足左子树又满足叶子节点我们就返回当前节点的值,否则返回 0

最后将左右子树的和相加就是筛选了左叶子之和

代码实现

python
class Solution:
    def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        def dfs(node: Optional[TreeNode], is_left: bool) -> int:
            if node is None:
                return 0  # 空节点直接返回0
            
            # 如果是叶子节点
            if not node.left and not node.right:
                return node.val if is_left else 0
            
            # 左子树递归(标记为左子节点)
            left_sum = dfs(node.left, True)
            # 右子树递归(标记为右子节点)
            right_sum = dfs(node.right, False)
            
            return left_sum + right_sum
        
        return dfs(root, False)
javascript
/**
 * @param {TreeNode} root
 * @return {number}
 */
var sumOfLeftLeaves = function(root) {
    function dfs(node, isLeft) {
        if (!node) return 0;

        if (!node.left && !node.right)
            return isLeft ? node.val : 0;

        return dfs(node.left, true) + dfs(node.right, false);
    }

    return dfs(root, false);
};

复杂度分析

时间复杂度:O(n)

空间复杂度:O(h)

链接

404 国际版

404 中文版