二叉树——路径总和

news/2024/4/20 3:04:39/文章来源:https://blog.csdn.net/ljh5930/article/details/129166882

路径总和

链接
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

示例 1:
在这里插入图片描述

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
示例 2:
在这里插入图片描述

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。
示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

递归法

  1. 返回值和参数
    返回值:就是搜索所有路径,不用处理返回值,所以bool
    参数:节点,路径和
bool traversal(TreeNode* cur,int sum)
  1. 终止条件
    到叶子节点,值等于和不等于
        if(cur->left==NULL && cur->right==NULL && sum==targetSum) return true;if(cur->left==NULL && cur->right==NULL && sum!=targetSum) return false;
  1. 单次递归
        sum+=cur->val;//写在判断前,就不需要回溯将sum-=cur->val,此处sum值不影响其他递归的sum值if(cur->left==NULL && cur->right==NULL && sum==targetSum) return true;//判断叶子节点if(cur->left==NULL && cur->right==NULL && sum!=targetSum) return false;//判断叶子节点if(cur->left) if(traversal(cur->left,sum,targetSum))return true;if(cur->right) if(traversal(cur->right,sum,targetSum)) return true;return false;

详细写

        if(cur->left) {sum+=cur->left->val;if(traversal(cur->left,sum,targetSum))return true;sum-=cur->left->val;}if(cur->right)        {sum+=cur->right->val;if(traversal(cur->right,sum,targetSum))return true;sum-=cur->right->val;}

在这里插入图片描述

sum计算的是一个子节点的值,判断子节点是否符合,不符合sum值要回溯的
如:函数参数的节点输入为1,处理左子节点2,sum+2,判断是否符合,不符合sum-2,这种记得中要加一下,看下面第二个代码

代码

class Solution {
public:bool traversal(TreeNode* cur,int sum,int targetSum){if(cur==NULL) return false;sum+=cur->val;if(cur->left==NULL && cur->right==NULL && sum==targetSum) return true;if(cur->left==NULL && cur->right==NULL && sum!=targetSum) return false;if(cur->left) if(traversal(cur->left,sum,targetSum))return true;if(cur->right) if(traversal(cur->right,sum,targetSum)) return true;return false;}bool hasPathSum(TreeNode* root, int targetSum) {int sum=0;return traversal(root,sum,targetSum);}
};
class Solution {
public:bool traversal(TreeNode* cur,int sum,int targetSum){if(cur==NULL) return false;// sum+=cur->val;if(cur->left==NULL && cur->right==NULL && sum==targetSum) return true;if(cur->left==NULL && cur->right==NULL && sum!=targetSum) return false;if(cur->left) {sum+=cur->left->val;if(traversal(cur->left,sum,targetSum))return true;sum-=cur->left->val;}if(cur->right)        {sum+=cur->right->val;if(traversal(cur->right,sum,targetSum))return true;sum-=cur->right->val;}return false;}bool hasPathSum(TreeNode* root, int targetSum) {int sum=0;if(root!=NULL) sum=root->val; //用详细的,中间节点就没有计算了,要加上去return traversal(root,sum,targetSum);}
};

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

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

相关文章

数据库及缓存之MySQL(一)

思维导图 常见知识点 1.mysql存储引擎: 2.innodb与myisam区别: 3.表设计字段选择: 4.mysql的varchar(M)最多存储数据: 5.事务基本特性: 6.事务并发引发问题: 7.mysql索引: 8.三星索引&#xf…

升职加薪必备,2023年程序员不能不知道的AI辅助编码工具

已经有很多人把chatGPT当做必备的Bug修复工具了,对于用AI写代码,有人感到失落,害怕被取代,而另一些人则认为人工智能将加快编写更好代码的过程。 尽管 AI 编写的代码并非完美无缺,但我相信,最终AI将取代人…

车机开发—【CarService启动流程】

汽车架构:车载HAL是汽车与车辆网络服务之间的接口定义(同时保护传入的数据): 车载HAL与Android Automotive架构: Car App:包括OEM和第三方开发的AppCar API:内有包含CarSensorManager在内的AP…

Hadoop集群模式安装(Cluster mode)

1、Hadoop源码编译 安装包、源码包下载地址 Index of /dist/hadoop/common/hadoop-3.3.0为什么要重新编译Hadoop源码? 匹配不同操作系统本地库环境,Hadoop某些操作比如压缩、IO需要调用系统本地库(*.so|*.dll) 修改源码、重构源码 如何…

H12-831题库(有详细的解析)

1.(单选)某工程师利用2台路由器进行IPv6业务测试,通过运行BGP4模拟总部与分支的互联互通。如图所示,某工程师抓包查看R1发出的update报文。关于该报文信息的描述,以下哪个说法是正确的? A.该报文描述的路由的下一跳地址为:2001:db8::2345:1::1 B.该报文…

自动增长配置不合理导致的性能抖动

背景客户收到了SQL专家云告警邮件,在凌晨2点到3点之间带有资源等待的会话数暴增,请我们协助分析。现象登录SQL专家云,进入活动会话的趋势分析页面,下钻到2点钟一个小时内的数据,看到每分钟的等待数都在100左右&#xf…

关于upstream的八种回调方法

1 creat_request调用背景:用于创建自己模板与第三方服务器的第一次连接步骤1) 在Nginx主循环(ngx_worker_process_cycle方法) 中,会定期地调用事件模块, 以检查是否有网络事件发生。2) 事件模块…

人员行为识别系统 TensorFlow

人员行为识别系统人员行为识别系统通过TensorFlow深度学习技术,人员行为识别算法对画面中区域人员不按要求穿戴、违规抽烟打电话、睡岗离岗以及作业流程不规范实时分析预警,发现违规行为立即抓拍告警。深度学习应用到实际问题中,一个非常棘手…

快速读懂网络拓扑图

快速读懂网络拓扑图几重常见的网络拓扑总线型拓扑简介优点缺点环型拓扑简介优点缺点星型拓扑简介优点缺点网络层级机构节点结点链路通路不同的连接线代表什么意思?不同颜色、粗细的直线代表什么意思?闪电线-串行链路几重常见的网络拓扑 总线型拓扑 简介…

浅谈volatile关键字

文章目录1.保证内存可见性2.可见性验证3.原子性验证4.原子性问题解决5.禁止指令重排序6.JMM谈谈你的理解6.1.基本概念6.2.JMM同步规定6.2.1.可见性6.2.2.原子性6.2.3.有序性6.3.Volatile针对指令重排做了啥7.你在哪些地方用过Volatile?volatile是Java提供的轻量级的…

【华为OD机试模拟题】用 C++ 实现 - 求字符串中所有整数的最小和

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

【Git】Git的分支操作

目录 4、 Git 分支操作 4.1 什么是分支 4.2 分支的好处 4.3 分支的操作 4、 Git 分支操作 4.1 什么是分支 在版本控制过程中, 同时推进多个任务, 为每个任务, 我们就可以创建每个任务的单独分支。 使用分支意味着程序员可以把自己的工作…

postgres 源码解析50 LWLock轻量锁--1

简介 postgres LWLock(轻量级锁)是由SpinLock实现,主要提供对共享存储器的数据结构的互斥访问。LWLock有两种锁模式,一种为排他模式,另一种是共享模式,如果想要读取共享内存中的内容,需要在读取…

面试之设计模式(简单工厂模式)

案例 在面试时,面试官让你通过面对对象语言,用Java实现计算器控制台程序,要求输入两个数和运算符号,得出结果。大家可能想到是如下: public static void main(String[] args) {Scanner scanner new Scanner(System.…

BERT模型系列大全解读

前言 本文讲解的BERT系列模型主要是自编码语言模型-AE LM(AutoEncoder Language Model):通过在输入X中随机掩码(mask)一部分单词,然后预训练的主要任务之一就是根据上下文单词来预测这些单词,从…

F.pad() 函数

F.pad() 对tensor 进行扩充的函数。 torch.nn.functional.pad (input, pad, mode‘constant’, value0) input:需要扩充的 tensor,可以是图像数据,亦或是特征矩阵数据;pad:扩充维度,预先定义某维度上的扩充…

到了35岁,软件测试职业发展之困惑如何解?

35岁,从工作时间看,工作超过10年,过了7年之痒,多数IT人都已经跳槽几次。 35岁,发展比较好的软件测试人,已经在管理岗位(测试经理甚至测试总监)或已经成为测试专家或测试架构师。发展…

Head First设计模式---4.工厂方法模式

2.1工厂方法模式 亦称: 虚拟构造函数、Virtual Constructor、Factory Method 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。 [外链图片转存失败,源站可能有防盗链机制,建议将图片…

掌握MySQL分库分表(七)广播表、绑定表实战,水平分库+分表实现及之后的查询和删除操作

文章目录什么是广播表广播表实战数据库配置表Java配置实体类配置文件测试广播表水平分库分表配置文件运行测试什么是绑定表?绑定表实战配置数据库配置Java实体类配置文件运行测试水平分库分表后的查询和删除操作查询操作什么是广播表 指所有的分片数据源中都存在的…

2023该好好赚钱了,推荐三个下班就能做的副业

在过去的两年里,越来越多的同事选择辞职创业。许多人通过互联网红利赚到了他们的第一桶金。随着短视频的兴起,越来越多的人吹嘘自己年收入百万,导致很多刚进入职场的年轻人逐渐迷失自我,认为钱特别容易赚。但事实上,80…