404. 左叶子之和
计算给定二叉树的所有左叶子之和。
示例:
3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
分析
使用简单的二叉树遍历,前序中序后序均可以,在访问某节点时进行左叶子节点判断
node.left is None and node.left.left is None and node.lrft.right is None
如果是左叶子节点,则将该左叶子节点值加到结果中法1 递归法
将结果 定义为全局变量,递归程序这样只负责遍历,遇到左叶子节点就将
# 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 __init__(self): self.sum = 0 def sumOfLeftLeaves(self, root: TreeNode) -> int: self.recur(node=root) return self.sum def recur(self, node): if node is None: return if node.left and node.left.left is None and node.left.right is None: self.sum += node.left.val self.sumOfLeftLeaves(node.left) self.sumOfLeftLeaves(node.right)
法2 信息传递
将结果参与到递归遍历中 ,有种信息传递的感觉
# 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: TreeNode) -> int: if root is None: return 0 sum = 0 if root.left and root.left.left is None and root.left.right is None: sum += root.left.val leftSum = self.sumOfLeftLeaves(root.left) rightSum = self.sumOfLeftLeaves(root.right) return sum + leftSum + rightSum