二叉树路径总和

题目1:

给你二叉树的根节点 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 的根节点到叶子节点的路径。

下面来说一说我的思路:

依旧老规矩想到回溯,使用在递归函数的周围应该有一下几点内容

1:加上或者减去一个值val

2:递归函数,向左或者向右

3:回溯,减去或者加上一个值val

然后就是判断退出条件了:

如果cur指向的左右都为nullptr  并且  值为0那么就代表了找到一条正确的路,返回true

如果cur指向左右都为nullptr那么就返回

所以可得代码:

class Solution {
public:bool panduan = false;void order(TreeNode* cur,int targetSum){if(cur->left == nullptr && cur->right == nullptr && targetSum == 0){panduan = true;return;}if(cur->left == nullptr && cur->right == nullptr){return;}if(cur->left){targetSum -= cur -> left -> val;order(cur->left,targetSum);targetSum += cur->left->val;}if(cur->right){targetSum -= cur -> right -> val;order(cur->right,targetSum);targetSum += cur->right->val;}}bool hasPathSum(TreeNode* root, int targetSum) {if(root == nullptr){return false;}order(root,targetSum-root->val);return panduan;}
};

这里有一个很关键的点:因为我们要找到是否存在一条线路可以使节点值和为targetSum

但是我们在递归函数中用的是当前节点的下一个节点,所以传入的内容为targetSum-root->val

下面来看第二道题目:

题目大差不差,我直接说不同的地方,这个题目需要返回一个二维数组,每一行的值代表一条路,和为targetSum

思路:

首先接收值:一个根节点,一个二维数组的引用,一个 targetSum

结束条件和上面一个一样,但是结束条件里面的内容是吧一个一维数组加到二维数组里面

然后递归函数:

首先把val放到一维数组中,并且让targetSum减去val

然后递归往左或者往右

把val加回去

pop掉

看代码:

class Solution {
public:vector<int> add;vector<vector<int>> result;void order(TreeNode* cur,vector<vector<int>>& result,int targetSum){if(cur->left == nullptr && cur->right == nullptr && targetSum == 0){result.push_back(add);return;}if(cur->left == nullptr && cur->right == nullptr)return;if(cur->left){add.push_back(cur->left->val);targetSum -= cur->left->val;order(cur->left,result,targetSum);targetSum += cur->left->val;add.pop_back();}if(cur->right){add.push_back(cur->right->val);targetSum -= cur->right->val;order(cur->right,result,targetSum);targetSum += cur->right->val;add.pop_back();}return;}vector<vector<int>> pathSum(TreeNode* root, int targetSum) {if(root==nullptr)return result;add.push_back(root->val);order(root,result,targetSum-root->val);return result;}
};

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

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

相关文章

对比测评3款BI分析工具

前不久&#xff0c;一位准备入职阿里的学弟问我&#xff0c;他要做电商数据分析&#xff0c;电商有庞杂的标签、模型、数据和业务逻辑&#xff0c;菜鸟应该要具备什么样的分析能力啊&#xff1f; 我看了他的岗位职责&#xff0c;主要是负责经营决策支持、专题分析和数据看板搭…

FreeRTOS【5】线程阻塞

1.开发背景 基于上一篇指引&#xff0c;已经了解了线程的挂起和恢复&#xff0c;这个篇章主要测试线程阻塞的方法 2.开发需求 线程串行阻塞和周期阻塞 3.开发环境 window10 MDK STM32F429 FreeRTOS10.3.1 4.实现步骤 4.1 线程串行阻塞 其实在上一篇已经使用了线程阻塞&a…

项目管理—需求管理规程(软件研发过程标准,管理标准,标书技术编写,资质评审,安全管理体系,项目交付,实施运维,各类建设方案)

软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解…

基于卷积神经网络CNN,使用二维卷积Conv2D实现MNIST数字识别的四种方法

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

保研机试之【execve函数】

execve 参考&#xff1a;fork&#xff08;&#xff09;函数两次返回_fork是如何返回两次的-CSDN博客 setjmp/longjmp 还有E&#xff1a;

利用远程控制软件FinalShell远程连接虚拟机上的Linux系统(Windows)

一. VMware Workstation 安装CentOS Linux操作系统 传送门&#xff1a;VMware Workstation 安装CentOS Linux操作系统 1.右键打开终端 2.输入ifconfig 找到ens33对应 inet的id&#xff0c;这个就是虚拟机的ip地址图中所示为&#xff1a;192.168.5.128 3.打开finalshell 如…

2024中国(重庆)商旅文化川渝美食暨消费品博览会8月举办

2024中国(重庆)商旅文化川渝美食暨消费品博览会8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会背景&#xff1a; 2024中国航空科普大会暨第八届全国青少年无人机大赛在重庆举办&#xff…

类和对象、包等知识总结Java

类 类的概念&#xff1a;类是用来对一个实体&#xff08;对象&#xff09;进行描述的&#xff0c;主要描述该对象的属性&#xff0c;功能等。 类的定义和实例化 定义 定义类需要用到class关键字 &#xff08;大驼峰定义&#xff09;for example:class Dog... 初步了解一下…

vscode对一些软件的调试插件。

vscode对一些软件的调试插件。 1、ae &#xff0c;f1然后选择运行 after effect 脚本 2、maya,右键send code to maya 3、max&#xff0c;ctrle运行脚本到max 4、unity 从在Visual Studio代码使用.NET的核心&#xff1a; 1、安装.NET Core SDK&#xff0c;链接: https://dotn…

(1)双指针算法介绍与练习:移动零

目录 双指针算法介绍 练习&#xff1a;移动零 双指针算法介绍 双指针算法常见于数组和双向链表的题型 在数组中&#xff0c;双指针中的指针代表数组元素的下标&#xff0c;而不是真正的指针类型变量 在双向链表中&#xff0c;双指针中的指针即为真正意义上的指针&#xff…

浅谈内存泄漏

内存泄漏 概念 在JavaScript中&#xff0c;内存泄漏是指应用程序在不再需要使用某块内存时仍然保持对其的引用&#xff0c;导致内存不能被垃圾回收机制释放&#xff0c;最终导致内存占用过高&#xff0c;性能下降。 内存泄漏通常发生在以下情况&#xff1a; 全局变量&#…

【补充】图神经网络前传——Node2vec

Node2Vec【图神经网络论文精读】_哔哩哔哩_bilibili 解决的问题&#xff1a;图嵌入 把每一个节点编码成一个d维的低维、稠密&#xff08;不是one-hot&#xff09;、连续&#xff08;不是离散的&#xff0c;是实数->有助于保存更多的信息&#xff09;向量&#xff0c;并且&a…