力扣刷题-二叉树-二叉树左叶子之和

404 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

输入: root = [3,9,20,null,null,15,7]

输出: 24

解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

思路

迭代法

迭代法理解起来更容易,就是遍历每一个结点,去获取左叶子结点的值,然后加起来

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

# 法一: 迭代法 遍历每一个结点 采用中左右的方式
class Solution(object):
    def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        sum = 0 # 最终结果
        stack = [root] # 存储遍历结果
        while stack:
            node = stack.pop() # 弹出
            if node.left and (not node.left.left) and (not node.left.right): # 注意判断是否是叶子结点的方式
                sum += node.left.val
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)
        return sum

递归法

递归法也需要掌握

递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。

递归三部曲:

  1. 确定递归函数的参数和返回值

判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和 ,所以为int

使用题目中给出的函数就可以了。

  1. 确定终止条件

如果遍历到空节点,那么左叶子值一定是0

python 复制代码
if not root:
    return 0

注意,只有当前遍历的节点是父节点,才能判断其子节点是不是左叶子。 所以如果当前遍历的节点是叶子节点,那其左叶子也必定是0,那么终止条件为:

python 复制代码
if not root.left and not root.right:
    return 0 # 这个判断条件也可以不用写
  1. 确定单层递归的逻辑

当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。(单层逻辑 严格按照左中右的顺序)

python 复制代码
# 左
left_sum = self.sumOfLeftLeaves(root.left)
if root.left and (not root.left.left) and (not root.left.right):
    left_sum = root.left.val
# 右
right_sum = self.sumOfLeftLeaves(root.right)
sum = left_sum + right_sum # 中

整体递归代码:

python 复制代码
# 法二: 递归法 遍历方式:左右中
class Solution(object):
    def sumOfLeftLeaves(self, root):
        if not root:
            return 0
        # 左
        left_sum = self.sumOfLeftLeaves(root.left)
        if root.left and (not root.left.left) and (not root.left.right):
            left_sum = root.left.val
        # 右
        right_sum = self.sumOfLeftLeaves(root.right)
        sum = left_sum + right_sum # 中
        return sum
相关推荐
西柚小萌新1 天前
【深入浅出PyTorch】--8.1.PyTorch生态--torchvision
人工智能·pytorch·python
MonkeyKing_sunyuhua1 天前
can‘t read /etc/apt/sources.list: No such file or directory
python
多喝开水少熬夜1 天前
损失函数系列:focal-Dice-vgg
图像处理·python·算法·大模型·llm
立志成为大牛的小牛1 天前
数据结构——三十七、关键路径(王道408)
数据结构·笔记·程序人生·考研·算法
ytttr8731 天前
基于MATLAB的Relief算法特征权重选择实现
算法
初学小刘1 天前
基于 U-Net 的医学图像分割
python·opencv·计算机视觉
B站计算机毕业设计之家1 天前
Python招聘数据分析可视化系统 Boss直聘数据 selenium爬虫 Flask框架 数据清洗(附源码)✅
爬虫·python·selenium·机器学习·数据分析·flask
雪碧聊技术1 天前
爬虫是什么?
大数据·爬虫·python·数据分析
FL16238631291 天前
[yolov11改进系列]基于yolov11使用fasternet_t0替换backbone用于轻量化网络的python源码+训练源码
python·yolo·php
Freshman小白1 天前
python算法打包为docker镜像(边缘端api服务)
python·算法·docker