1. 问题描述:
计算给定二叉树的所有左叶子之和。
示例:
3 / \ 9 20 / \ 15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
2. 思路分析:
① 对于二叉树的题目都是可以使用递归来解决的,对于这道题目也是如此,分析题目可以知道左叶子节点需要满足两个条件,第一个点是叶子节点,第二个点是左节点,对于第一个条件很容易判断,我们在递归出口的时候判断当前的节点是否是叶子节点即可,对于第二个点,我们可以在方法中使用一个变量来标记当前的节点是左节点还是右节点即可,这样在递归到当前节点的时候就可以判断出来了,这里可以画出一棵具体的二叉树会非常好理解
② 我们在编写程序的时候可以根据具体的例子来编写出大体的代码,这样会很快确定数据的范围与边界,然后根据题目中的要求进一步完善代码即可
3. 代码如下:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
res = 0
# f为是左孩子还是右孩子的标志
def dfs(root: TreeNode, f: int):
if not root: return
# 叶子节点
if not root.left and not root.right:
# 判断是否是左节点
if f == 0:
nonlocal res
res += root.val
return
dfs(root.left, 0)
dfs(root.right, 1)
if not root: return 0
if not root.left and not root.right: return 0
dfs(root, 0)
return res