1. 问题描述:
计算给定二叉树的所有左叶子之和
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-left-leaves
2. 思路分析:
分析题目可以知道我们可以递归遍历二叉树。在递归的时候维护一个变量l用来判断当前的节点是否是左叶子节点即可。或者是先判断左孩子是否存在,如果存在那么判断左右孩子是否存在。
3. 代码如下:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
s = 0
# l标记是用来判断是否是左叶子节点
def dfs(self, root: TreeNode, l: int):
if not root: return
# 当前是叶子节点
if not root.left and not root.right:
if l == 1:
self.s += root.val
return
self.dfs(root.left, 1)
self.dfs(root.right, 0)
def sumOfLeftLeaves(self, root: TreeNode) -> int:
self.dfs(root, 0)
return self.s
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
res = 0
def dfs(self, root: TreeNode):
if not root: return
if root.left:
if not root.left.left and not root.left.right:
self.res += root.left.val
self.dfs(root.left)
self.dfs(root.right)
def sumOfLeftLeaves(self, root: TreeNode) -> int:
self.dfs(root)
return self.res