404. 左叶子之和 Easy
给定二叉树的根节点 root ,返回所有左叶子之和。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
示例 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)