404.左叶子之和
每日几道leetcode刷刷题!
传送门
题目描述
给定二叉树的根节点 root ,返回所有左叶子之和。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
代码
class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
#递归终止条件
if not root:
return 0
leftnode_sum = 0 #记录节点的树
#判断是否是左子叶
if root.left and not root.left.left and not root.left.right:
leftnode_sum = root.left.val
#递归
return leftnode_sum + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)
总结
首先应该需要知道,什么是左子叶:如果左节点不为空,且左节点没有左右孩⼦,那么这个节点就是左叶叶。
那么如何去判断呢?
判断当前节点是不是左叶⼦是⽆法判断的,必须要通过节点的⽗节点来判断其左孩⼦是不是左叶⼦。
1.递归法
递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶⼦数值之和
三部曲:
- 递归函数的参数和返回值
树的根节点,返回数值 - 终止条件
if not root:
return 0
- 单层递归逻辑
当遇到左叶⼦节点的时候,记录数值,然后通过递归求取左⼦树左叶⼦之和,和 右⼦树左叶⼦之和,相加便是整个树的左叶⼦之和