二叉树——左叶子节点之和

以目前所学的知识而言,对于二叉树涉及递归相关的问题,一般需要设定两个返回条件:

1、二叉树左子树或右子树遍历完后,即节点为NULL时需要返回。

2、当前节点满足题目要求时,需要对相应参数做出改变,或是直接返回相应参数。

代码及思路:

代码:

//摘自牛客网
/*** struct TreeNode {*	int val;*	struct TreeNode *left;*	struct TreeNode *right;* };*/
/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root TreeNode类 * @return int整型*/
int sumOfLeftLeaves(struct TreeNode* root ) {// write code hereif(root == NULL){return 0;}int sum = 0;if(root->left && root->left->left == NULL && root->left->right == NULL){sum+=root->left->val;}sum +=  sumOfLeftLeaves(root->left) +  sumOfLeftLeaves(root->right);return sum;
}

思路:

对于涉及递归的问题,最好的滤清思路的方式是画图解决。以图一所示的二叉树结点为例:

图一:

在此需要知道的是:递归过程是一个不断向系统申请空间,并在一定条件下返回同时释放空间的过程,且每个空间都是独立的,即使是同一个函数,同一个变量名,他们都是独立的,除了传址(传引用)变化通过下图(图二)来分析图一中的递归过程。

图二:

从根节点开始:

初始时,两个 if 条件均不满足,因此再次调用 sumOfLeftLeaves 函数,访问其左节点。

当来到图一 节点2,此时满足第二个 if 条件,通过相应算式,使得 sum = 4;但返回值仍然不确定,因此需要继续递归 sumOfLeftLeaves 函数,继续访问左节点。

当来到图一3节点,同样不满足两个 if 条件,继续递归左节点,此时左节点已为 NULL

返回 0 (蓝色线)回到上一次调用该函数的位置处,并继续递归右子节点,同样返回 0,此时 节点4 sum += 0+0 = 0,返回 sum= 0,回到上一次调用该函数的位置处(即,节点2),开始调用 节点 2 的右子树,同理也会得到返回值 sum = 0,此时 sum += 0 + 0

但先前的 节点2 满足第二个 if 条件,此时 节点2 中的 sum = 4 (左节点的值),因此返回 sum =4,最终在根节点中得到了左子树正确的返回值,同理再次遍历右节点可以得到返回值为 6,

最终得 sum += 4 + 6;

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

同城美容美发一站式到店上门服务系统小程序源码

💆‍♀️同城美容美发一站式到店上门服务:美丽,就该如此便捷💇‍♂️ 🏠一、同城服务,触手可及的美丽 在繁忙的都市生活中,我们总是在寻找那份触手可及的美丽。而“同城美容美发一站式到店上门…

OpenCV高级图形用户界面(1)创建滑动条函数createTrackbar()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 创建一个滑动条并将其附加到指定的窗口。 该函数 createTrackbar 创建一个具有指定名称和范围的滑动条(滑块或范围控制)…

0基础做微信扫码点餐小程序,开发一款餐饮点餐软件收银系统

扫码点餐小程序收银系统是一种现代化的餐饮管理工具,它结合了移动互联网技术和餐饮业务需求,为餐厅提供了高效、便捷的点餐、收银和管理服务。以下是对该系统的详细介绍和功能解析: 一、系统介绍 扫码点餐小程序收银系统通常由系统后台、手…

JS设计模式之职责链模式:优雅地处理请求流程

一. 前言 在前端开发中,我们经常会遇到需要按照一定的顺序处理一系列请求或操作的情况,如果将每一步处理都硬编码在一起,会导致代码臃肿,可维护性和可扩展性都会大大降低。而职责链模式恰好提供了一种优雅的解决方案。 无论你是…

大模型面试八股+答案,LLM-offer手到擒来!

你是否也曾为面试大模型八股文而苦恼?别担心!今天我就来给你分享一些绝妙的面试技巧,让你轻松应对! 🔍 第一关:了解题目 首先,一定要仔细阅读题目,理解清楚每个要求。明确问题的关键…

字母数字图像分割系统源码&数据集分享

字母数字图像分割系统源码&数据集分享 [yolov8-seg-C2f-Faster-EMA&yolov8-seg-C2f-DiverseBranchBlock等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目…

硬件-PCB-叠层设计(四层板六层板)

文章目录 一:简介二:多层电路板结构三 PCB叠层设计的内容3.1 叠层设计的基本原则3.2 叠层设计的准备工作 四 六层PCB叠层方案介绍4.1 介绍常见的六层叠层结构并分析其优缺点 五 方案选择5.1 方案一:S-G-S-S-P-S5.2 方案二:S-S-G-P…

夹耳式耳机值得购买吗?这一篇文章扫清耳夹式耳机盲点!

近年来,夹耳式耳机备受很多人喜爱。主要原因在于这种耳机不入耳,既能保护我们的听力健康,又能让我们享受到极致的音乐体验。久而久之,人们反而对入耳式耳机戴着感到不习惯了。然而,一些想要入手夹耳式耳机的小伙伴却犯…

老板员工必看:钉钉聊天记录可以被监控吗?答案你万万想不到!

如今,无论是办公室还是居家远程工作,钉钉已经成为了许多公司不可或缺的沟通工具。 老板们依靠它安排工作、传递任务,员工们用它互相协作、讨论项目。可是,你有没有想过,钉钉聊天记录可以被监控吗? 答案可…

BP实战minist数据集

目录 前言 一、MNIST数据集介绍和加载 1.MNIST数据集介绍 2.加载数据集MNIST数据集 二、构建 BP 网络模型 1.神经网络结构图示 2.BP 网络模型代码解释 三、定义和训练BP 网络模型 四、训练结果 总结 前言 在当今人工智能与机器学习飞速发展的时代,神经网络…

SPI主从通讯稳定性之解决方法

在使用SPI通讯时,将硬件SPI用作主机的比较多,程序设计也比较容易,但是,若将硬件SPI用作从机了,网上的案例就比较少了,因为大家都有一个习惯,实在实现不了,就用软件模拟SPI来完成通讯…

函数式接口在Java中的应用与实践

1. 引言 函数式接口是Java 8引入的一个概念,它是指只有一个抽象方法的接口。函数式接口可以被用作lambda表达式的目标类型。在函数式接口中,除了抽象方法外,还可以有默认方法和静态方法。 函数式接口的引入是为了支持函数式编程&#xff0c…

Java项目: 基于SpringBoot+mybatis+maven+vue网上摄影工作室(含源码+数据库+任务书+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmavenvue网上摄影工作室 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、…

【算法】博弈论(C/C++)

个人主页:摆烂小白敲代码 创作领域:算法、C/C 持续更新算法领域的文章,让博主在您的算法之路上祝您一臂之力 欢迎各位大佬莅临我的博客,您的关注、点赞、收藏、评论是我持续创作最大的动力 目录 博弈论: 1. Grundy数…

【MySQL】-- 表的操作

文章目录 1. 查看所有表1.1 语法 2. 创建表2.1 语法2.2 示例2.3 表在磁盘上对应的文件 3. 查看表结构3.1 语法3.2 示例 4. 查看创建表的语句5. 修改表5.1 语法5.2 示例5.2.1 向表中添加一列5.2.2 修改某列的长度5.2.3 重命名某列5.2.4 删除某个字段5.2.5 修改表名 6. 删除表6.1…

不入耳开放式耳机哪个品牌好?开放式耳机排行榜10强推荐!

不入耳开放式耳机哪个品牌好?开放式耳机排行榜10强推荐! 随着开放式耳机的日益流行,市场上的选择愈发多样,这有时会让消费者在挑选时感到迷茫,不知道哪个牌子的开放式耳机最好。为解决这一困扰,我精心筛选…

社区圈子系统 圈子社区系统 兴趣社区圈子论坛系统 圈子系统源码圈子系统的适用领域有哪些?如何打造自己的圈子圈子系统有哪些常见问题

社区圈子系统 圈子社区系统 兴趣社区圈子论坛系统 圈子系统源码圈子系统的适用领域有哪些?如何打造自己的圈子圈子系统有哪些常见问题 圈子系统的适用领域 圈子系统的适用领域广泛,涵盖了多个行业和场景,包括但不限于以下几个方面&#xff1…

Label Studio 半自动化标注

引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型,也可以根据需要进行扩展和自定义。 1…

springboot邮件群发功能的开发与优化策略?

springboot邮件配置指南?如何实现spring邮件功能? SpringBoot框架因其简洁、高效的特点,成为了开发邮件群发功能的理想选择。AokSend将深入探讨SpringBoot邮件群发功能的开发过程,并提出一系列优化策略,以确保邮件发送…

常见的图像处理算法:均值滤波----mean filter

一、什么是均值滤波 均值滤波器是一种常见的图像滤波器,是典型的线性滤波算法。其基本原理是用一个给定的窗口覆盖图像中的每一个像素点,将窗口内的像素值求平均值,然后用这个平均值代替原来的像素值。均值滤波器可以去除噪声、平滑图像、减少…