112. 路径总和

news2025/7/18 4:49:16

文章目录

  • 2.示例
  • 3.答案
    • ①递归
    • ②BFS
    • ③DFS

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

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

2.示例

在这里插入图片描述

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

3.答案

①递归

注意第二个示例,当结点为空时认为不存在路径返回false;
可以使得参数 targetSum等于当前路径上为了凑出targetSum还差的数值。

停止条件:
结点为空时返回false, 当前结点为叶子结点且val=targetSum(刚好凑出targetSum) 返回true。
递归内容: 在左孩子上查找,在右孩子上查找
返回值: 左右孩子查找结果的或

 bool hasPathSum(TreeNode* root, int targetSum) {  
        //尝试递归,将taargetsum看做还差的值
        if(!root) return false;//空指针,检查路径时,不能把节点为空当做一种
        if(!root->left&&!root->right) return targetSum==root->val;  //叶子结点,把这个当做递归的退出条件之一
         return hasPathSum(root->left,targetSum-root->val)||hasPathSum(root->right,targetSum-root->val);

②BFS

层次遍历中,可以一层一层检查,每次保存当前结点和当前路径所有节点和.

 bool hasPathSum(TreeNode* root, int targetSum) { 
        if(!root) return false;//空指针,检查路径时,不能把节点为空当做一种
        queue<TreeNode*> qt;
        queue<int> qi;
        qt.push(root); 
        qi.push(root->val);
        while(!qt.empty()){ 
            TreeNode* tmp=qt.front();  //取出当前结点
            qt.pop();
            int val=qi.front();  //当前路径和
            qi.pop();  

            if(!tmp->left&&!tmp->right) {   //当前为叶子结点
                if(targetSum==val) return true;
                continue;
            }

            if(tmp->left) qt.push(tmp->left),qi.push(val+tmp->left->val);
            if(tmp->right) qt.push(tmp->right),qi.push(val+tmp->right->val);
        }
        return false;

③DFS

深度优先遍历同样,每次保存当前结点和当前结点路径和。

 bool hasPathSum(TreeNode* root, int targetSum) { 
		 if(!root) return false;
        /深度优先  ,每次都是一条路径和
        stack<TreeNode*> st;
        stack<int> si;
        st.push(root); 
        si.push(root->val);
        while(!st.empty()){ 
            TreeNode* tmp=st.top();  //取出当前结点
            st.pop();
            int val=si.top();
            si.pop();  

            if(!tmp->left&&!tmp->right) {   //当前为叶子结点
                if(targetSum==val) return true;
                continue;
            }

            if(tmp->left) st.push(tmp->left),si.push(val+tmp->left->val);
            if(tmp->right) st.push(tmp->right),si.push(val+tmp->right->val);
        }
        return false;

    }

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/path-sum

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

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

相关文章

智慧电力解决方案-最新全套文件

智慧电力解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧电力全套最新解决方案合集一、建设背景 电力能源是支撑整个社会运行的最重要基础体系之一。伴随着经济和社会生活的发展&#xff0c;人们对电力需求不断增长&#xff0c;同时随着能源需求日…

docker 安装 portainer 来管理容器 (记录 1)

docker 安装 portainer 来管理容器 &#xff08;记录 1&#xff09; 初docker 安装 portainer前置条件&#xff1a;安装docker下载镜像 portainer部署容器配置进入监控初 希望能写一些简单的教程和案例分享给需要的人 docker 安装 portainer 前置条件&#xff1a;安装docker…

【JavaSE】异常处理

文章目录什么是异常异常的分类异常的处理流程throw异常的抛出throws 和 try-catch捕获异常finally自定义异常类什么是异常 在生活中我们头疼脑热都是身体出现的异常&#xff0c;在代码中也是一样的&#xff0c;尽管程序员在写代码时已经非常追求完美&#xff0c;但是总会有一些…

【真北读书】弗兰克意义三途径,让你人生的意义不漂移

维克多弗兰克&#xff0c;意义疗法创始人&#xff0c;出生于奥地利维也纳一个贫困的犹太人家庭。弗兰克15岁时质疑化学老师说的生命只是化学燃料&#xff0c;开始思考生命的意义&#xff0c;曾学习弗洛伊德、阿德勒、海德格尔和尼采&#xff0c;在被囚禁之前&#xff0c;已形成…

终于有人把大数据的相关知识讲全了(大数据基础框架、数据库、大数据分析分布式技术),从入门到进阶全部涵盖了!

前言 经常有初学者在博客和微信问我&#xff0c;自己想往大数据方向发展&#xff0c;该学哪些技术&#xff0c;学习路线是什么样的&#xff0c;觉得大数据很火&#xff0c;就业很好&#xff0c;薪资很高。如果自己很迷茫&#xff0c;为了这些原因想往大数据方向发展&#xff0…

用VB设计年级人员管理系统

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 课题研究背景 1 1.2 课题研究目的和任务 1 1.3 课题研究的意义 2 1.4 论文的主要内容和章节安排 2 第二章 运行环境开发工具 3 2.1 运行环境 3 2.2 开发工具简介 3 2.2.1 VB6.0基础 3 2.2.2 SQL Server2000数据库基础 3 第三章 需…

【HDU No. 2874】 城市之间的联系 Connections between cities

【HDU No. 2874】 城市之间的联系 Connections between cities 杭电OJ 题目地址 【题意】 由于大部分道路在战争期间已被完全摧毁&#xff0c;所以两个城市之间可能没有路径&#xff0c;也没有环。 已知道路状况&#xff0c;想知道任意两个城市之间是否存在路径。若答案是肯…

11.一键分析你的上网行为(web页面可视化)

## 一键分析你的上网行为, 看看你平时上网都在干嘛? ## Chrome浏览器历史记录文件可视化### 简介**想看看你最近一年都在干嘛&#xff1f;看看你平时上网是在摸鱼还是认真工作&#xff1f;想写年度汇报总结&#xff0c;但是苦于没有数据&#xff1f;现在&#xff0c;它来了。*…

国外顶尖程序员手写,402页汉译版微服务与事件驱动架构开发手册

为什么用事件驱动型微服务&#xff1f; Marshall McLuhan认为&#xff0c;影响人类并给社会带来根本性变革的不是媒介的内容&#xff0c;而是与媒介的互动过程。在我们的集体参与下&#xff0c;报纸、广播、电视、互联网、即时通信和社交媒体改变了人类的互动方式以及社会结构…

JDK17新特性

一.JEP 409: Sealed Classes 1.1简介 官网链接sealed class 从如下官网的简介与描述可以看出&#xff0c;这个新特性的目的是为了限制类与接口的 被继承与实现&#xff0c;比如说我有个 A类&#xff0c;那么我现在限定只有 B&#xff0c;C&#xff0c;D三个类可以继承 那么就需…

DRM架构介绍(一)

1、 DRM简介&#xff08;Direct Rendering Manager&#xff09;传统linux显示设备驱动开发时&#xff0c;通常使用FB驱动架构&#xff0c;随着显卡性能升级&#xff1a;显示覆盖&#xff08;菜单层级&#xff09;、GPU加速、硬件光标&#xff0c;传统FB架构无法很好支持&#x…

activiti-bpmn-converter

activiti-bpmn-converter目录概述需求&#xff1a;设计思路实现思路分析1.BpmnXMLConstants2.BpmnXMLConverter3.StartEventXMLConverter4.EndEventXMLConverter参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full bu…

C++调用OpenCV实现图像平滑处理

1 前言 图像的平滑处理&#xff0c;也叫做模糊处理&#xff0c;是在尽量保留原始图像信息的情况下&#xff0c;抑制或去除图像内的噪声、降低细节层次信息等一系列过程。是一种操作简单但使用频率很高的图像处理方法。由于实际的图像索引方式&#xff0c;与我们常用的x和y轴的…

2022年 SecXOps 安全智能分析技术白皮书 学习笔记 免费下载地址

核心能力 为了加快安全分析能力更全面、更深入的自动化 &#xff0c;SecXOps 的目标在于创建一个集成的用于 Security 的 XOps 实践&#xff0c;提升安全分析的场景覆盖率和运营效率。SecXOps 技术并不 015 SecXOps 技术体系 是 Ops 技术在安全领域的简单加和&#xff0c;SecXO…

postman拦截浏览器请求

postman可以去浏览器请求进行拦截&#xff0c;并将请求存放至集合。 原理 postman内部有捕获http请求流量的代理&#xff1b; postman app 监听这客户端程序或者设备发出的调用请求&#xff1b;postman 代理端会捕获到请求并把它转发到服务器&#xff1b;服务器将响应返回给p…

双非大学改考408,软件工程专业考研报考人数较少!

南昌航空大学是一所双非大学&#xff0c;位于江西省南昌市。南昌航空大学计算机学科评估没有&#xff0c;软件工程学科评估C&#xff0c;计算机实力在双非大学中也并不算强。南昌航空大学今年计算机考研大变化&#xff0c;软件学院的所有专业&#xff08;包括&#xff1a;软件工…

虚拟化性能优化系列-numatune

numatune是什么 numatune是libvirt的一个参数&#xff0c;可以用在numa架构的host上&#xff0c;以控制子机的内存访问策略。 使用方法如下&#xff0c;参考libvirt文档 <domain> ... <numatune> <memory mode"strict" nodeset"1-4,^3"/&…

多线程(1)

多线程 前言 &#xff1a; 上文主要了解到了进程&#xff0c; 那么为啥需要引入进程呢&#xff1f;   或者说为啥要有进程呢&#xff1f; 其实这里最主要的目的是为了解决 并发编程 这样的问题。 了解 &#xff1a;   这里 cpu 进入了多核心的时代&#xff0c;想要进一步提…

解决:给 VSCode 手动添加(解压压缩包)相关插件的问题

1、一般的添加方式为&#xff1a; 在 VSCode 里面扩展程序里面直接搜索添加即可&#xff1b; 2、如何手动添加一个 VSCode 相关插件&#xff1f; 其一、首先把相关文件解压&#xff0c;解压成一个文件夹&#xff1b; 其二、找到 VSCode 的 extensions 的地址并把 A 所述文件…

【Java 设计模式】创建者模式 之抽象工厂模式

抽象工厂模式1 概念2 角色3 甜品店案例3.1 类图3.2 实现4 优缺点1 概念 产品族&#xff1a;华为既有华为手机&#xff0c;也有华为电脑、华为平板&#xff0c;华为手机、华为电脑和华为平板属于一个产品族&#xff0c;因为他们都是华为品牌。产品等级&#xff1a;有华为手机&am…