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

404 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。
示例 1:
image.png
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

思路

迭代法

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

class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.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.valif node.left:stack.append(node.left)if node.right:stack.append(node.right)return sum

递归法

递归法也需要掌握
递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。
递归三部曲:

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

判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int
使用题目中给出的函数就可以了。

  1. 确定终止条件

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

if not root:return 0

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

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

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

# 左
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 # 中

整体递归代码:

# 法二: 递归法 遍历方式:左右中
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/282846.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt5】如何用SVG文件来给应用程序设置图标

2023年12月17日,周日晚上 首先,在资源文件里面添加SVG文件 其次,写如下的代码 setWindowIcon(QIcon(":/icons/JuLongNotepadIcon.svg")); 最后,大功告成

一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下再反弹,求它在第10次落地时共经过多少米,第10次反弹多高。

代码如下: 结果为: #include<stdio.h> int main() { double x 100.0, y0.0; for (int i 1; i < 10; i) { y x; x / 2; y x; } y - x; printf("第十次落地时共经过%lf米\n第十次反弹%lf米", y, x); return 0; }

HarmonyOS应用开发者高级认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-28】

系列文章&#xff1a; HarmonyOS应用开发者基础认证满分答案&#xff08;100分&#xff09; HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者高级认证满分答案&#xff08;100分&#xff09; HarmonyOS云开发基础认证满分答案&#xff08;100分&#xf…

部署智能合约以及 javascript 调用合约函数(Web3项目二实战之三)

在上一篇 智能合约是Web3项目的核心要务(Web3项目二实战之二) ,我们已然为项目编写了智能合约,在攥写完智能合约后,该项目将完成了一大部分,剩下无非就是用户界面交互的内容。 然而,在码完了智能合约代码后,起着承前启后关键性的便是,前端界面与智能合约的交互。 智能…

ripro后台登录后转圈和图标不显示的原因及解决方法

最近&#xff0c;好多小伙伴使用ripro主题的小伙伴们都发现&#xff0c;登录后台后&#xff0c;进入主题设置就转圈&#xff0c;等待老半天后好不容易显示页面了&#xff0c;却发现图标不显示了&#xff0c;都统一显示为方框。 这是因为后台的js、css这类静态资源托管用的是js…

PIG框架学习1——密码模式登录认证获取Token流程

文章目录 O、前言一、总流程概括&#xff1a;二、具体流程分析PIG提供的具体流程图&#xff1a;鉴权请求报文示例0、网关前置处理1、客户端认证处理2、正式接受登录请求3、组装认证对象4、认证管理器进行认证&#xff08;授权认证调用&#xff09;5、认证成功处理器 O、前言 对…

PVE系列-防火墙的免费安静之旅IPfire

Ventoy一款引导盘可以引导各种启动盘安装盘的工具https://www.ventoy.net/cn/index.html 在它的兼容iso的列表 中发现了Ipfirehttps://wiki.ipfire.org/ &#xff0c;本来用着openwrt也挺好&#xff0c;忍不住的虚拟机尝了尝鲜&#xff0c;发现的功能有2&#xff0c; 安全吧&a…

Vue脚手架环境搭建

一、node安装 1、下载地址&#xff1a;Node.js 2、开始安装&#xff0c;下一步 3、 可以更改安装路径 4、 默认安装&#xff0c;继续下一步 5、不勾选&#xff0c;继续下一步 6、安装完成&#xff0c;点击finish 7、测试&#xff0c;打开CMD控制台&#xff0c;输入命令&#…

leetcode刷题日志-383赎金信

思路&#xff1a;分别用两个map记录ransomNote和magazine中的字符以及出现的次数。最后遍历记录ransomNote的map&#xff0c;如果ransomNote的map中出现的magazine的map中没有出现或者出现的次数小于ransomNote的map则返回false&#xff0c;否则返回true&#xff1b; class So…

代码随想录二刷 | 二叉树 | 从中序与后序遍历序列构造二叉树

代码随想录二刷 &#xff5c; 二叉树 &#xff5c; 从中序与后序遍历序列构造二叉树 题目描述解题思路代码实现 题目描述 106.从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是…

【案例】注册表简介,新建一个右键菜单打开方式选项

这里写目录标题 来源注册表的介绍注册表编辑器VScode的打开方式菜单![image-20231217201730121](https://img-blog.csdnimg.cn/img_convert/56c02643df9e8ec3afb4f3ac5cc0cdd5.png)如何自定义一个右键菜单备份注册表新建一个菜单选项”右键用记事本打开“ DWORDQWORD可扩充字符…

【动态规划】06路径问题_不同路径II_C++(medium)

题目链接&#xff1a;leetcode不同路径II 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求在考虑网格中有障碍物的情况下&#xff0c;从左上角到右下角将会有多少条不同的路径…