剑指offer——JZ82 二叉树中和为某一值的路径(一) 解题思路与具体代码【C++】

news2024/11/19 0:22:26

一、题目描述与要求

二叉树中和为某一值的路径(一)_牛客题霸_牛客网 (nowcoder.com)

题目描述

给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。

1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点

2.叶子节点是指没有子节点的节点

3.路径只能从父节点到子节点,不能从子节点到父节点

4.总节点数目为n
例如:
给出如下的二叉树,sum=22,

返回true,因为存在一条路径 5→4→11→2的节点值之和为 22

数据范围:

1.树上的节点数满足 0≤n≤10000

2.每 个节点的值都满足 ∣val∣≤1000

要求:空间复杂度 O(n),时间复杂度O(n)

进阶:空间复杂度 O(树的高度),时间复杂度 O(n)

示例

示例1:

输入:{5,4,8,1,11,#,9,#,#,2,7},22

返回值:true

示例2:

输入:{1,2},0

返回值:false

示例3:

输入:{1,2},3

返回值:true

示例4:

输入:{},0

返回值:false


二、解题思路

根据题目描述,我们需要判断这个二叉树是否存在父节点到叶子结点的路径的和等于sum,很明显我们需要对这个二叉树进行遍历,且路径定义为从树的根结点开始往下一直到叶子结点所经过的结点。因而我们需要从根结点开始逐层往下寻找,并且判断是否存在路径能够使它们的和等于sum。

比起我们去定义一个变量来计算路径之和与sum比较,这样经常需要更新,容易搞混,所以我们不如直接在访问完每个结点需要进入到下一层的时候,直接将sum减去当前结点的值,这样一直到叶子结点,只要此时sum减去叶子结点的值等于0,那么就说明路径存在,即可返回true即可。

我们可以采用递归的思想,依次访问每个结点,当然首先要判断结点是否为空,空则直接返回false,然后判断当前结点是否是叶子结点,是的话则判断sum-当前结点的值是否等于0,都满足的话代表路径存在,返回true,不满足的话就继续访问当前结点的左右子节点继续进行判断,一直到遍历完整棵树,最后返回结果即可。


三、具体代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    bool hasPathSum(TreeNode* root, int sum) {
        //空结点找不到路径
        if(root==nullptr)  return false;
        //当访问到叶子节点并且sum此时为0 则代表找到了路径
        if(root->left==nullptr&&root->right==nullptr&&sum-root->val==0)
             return true;
        //递归访问子节点 同时将sum-当前结点的值
        return hasPathSum(root->left,sum-root->val)||hasPathSum(root->right, sum-root->val);
    }
};

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

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

相关文章

consulmanage部署

一、部署consul 使用yum方式部署consul yum install -y yum-utils yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo yum -y install consul 执行以下命令获取uuid密钥并记录下来 uuidgen 编辑consul配置文件 vi /etc/consul.d/consul.h…

【Vue面试题四】、Vue实例挂载的过程中发生了什么?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:Vue实例挂载的过程 一、…

【抓包https请求网络异常/无数据怎么破】

当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的Ap…

it端到端运营监控

公司的运维监控已成为确保业务顺利运行的关键。特别是对于IT部门,端到端运维监控不仅可以帮助企业及时发现和解决问题,还可以提高业务效率,优化客户体验。端到端运维监控的概念、重要性及其实施方法。 端到端操作监控的概念 端到端操作监控&…

文件IO函数

目录 通用IO模型:open、read、write、lseek、close 举例1 举例2 非通用函数:ioctl/mmap mmap ioctl 函数用法帮助命令 help man info 系统调用函数怎么进入内核? 内核的sys_open、sys_read会做什么? 通用IO模型&#…

FUXA入门教程

通过docker安装fuxa后: 打开后的界面如下: 完整配置如下: MQTT驱动演示

C++三大特性——继承(上篇)

文章目录 目录 一、继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 一、继承的概念及定义 1.1继承的概念 继承(inherita…

【消费战略方法论】消费烙印的策略模型

消费烙印策略模型 消费烙印策略,以消费者认知为导向,以品牌核心价值为中心,建立统一、高效、落地的品牌系统闭环,通过极致烙印方法(定位语言烙印、视觉烙印、产品烙印)让品牌价值烙印深植消费者心智。 消费烙印的对象是消费者&a…

QQ浏览器怎么才能设置默认搜索引擎为百度

问题: 打开QQ浏览器,搜索相关信息时发现总是默认为”搜狗搜索引擎“,想将其转为”百度搜索引擎“ 解决: 1、点击浏览器右侧”菜单“图标,选择”设置“,如下图所示: 2、在”常规设置“中的”搜…

一篇概全,接口测试知识盲扫,真正的接口测试是如何做的...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、接口测试的基本…

基于虚幻引擎的AI训练合成数据生成

推荐:用 NSDT编辑器 快速搭建可编程3D场景 近年来,合成数据生成(Synthetic Data Generation)已成为手动收集和注释数据集的替代方法。 数据合成器的优点主要有两个。 首先,它使获取数据的成本几乎为零,同时…

Java读取Excel内容,最后获得一个list对象

代码层 public R importPackage(MultipartFile multipartFile) {try {log.info("multipartFile " multipartFile);log.info("ContentType " multipartFile.getContentType());log.info("OriginalFilename " multipartFile.getOriginalFil…

基于 FPGA 的机器博弈五子棋游戏

基于 FPGA 的机器博弈五子棋游戏 一,设计目的 五子棋是一种深受大众喜爱的游戏,其规则简单,变化多端,非常富有趣味性 和消遣性。棋类游戏在具备娱乐性、益智性的同时也因为其载体大多是手机, 电脑等移动互联网设备导致现代社会低头族等现象更加严重,危害青少年的身 体健康…

VR全景展示带来旅游新体验,助力旅游业发展!

引言: VR(虚拟现实)技术正以惊人的速度改变着各行各业,在旅游业中,VR全景展示也展现了其惊人的影响力,为景区带来了全新的宣传机会和游客体验。 一.什么是VR全景展示? VR全景展示是…

科创人·TATA木门CIO乐勇斌:数字化变革大坎儿在组织变革,天再冷也要拥抱智能

乐勇斌 TATA木门信息中心总监 10年信息化领域管理咨询经验,熟悉零售、电商、汽车、医药、制造、机械加工、家居制造等行业信息化规划、解决方案、建设和流程落地;具备跨区域、项目集和项目组合管控能力,擅于集团化产供销一体化规划&#xff…

【Vue基础-数字大屏】自定义主题

一、apache主题模板 链接https://echarts.apache.org/zh/download-theme.html 二、操作步骤 1、在apache主题模板中定制所需要的主题,如下图点击下载,复制其json 2、回到项目代码,在assets目录下新建index.js文件,新建变量&…

(三)行为模式:8、状态模式(State Pattern)(C++示例)

目录 1、状态模式(State Pattern)含义 2、状态模式的UML图学习 3、状态模式的应用场景 4、状态模式的优缺点 (1)优点 (2)缺点 5、C实现状态模式的实例 1、状态模式(State Pattern&#x…

【STM32单片机】俄罗斯方块游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用按键、IIC OLED模块等。 主要功能: 系统运行后,OLED显示俄罗斯方块游戏界面并开始游戏,KEY1键用于方块方向旋转&…

【交互式阈值二进制图像】采用彩色或单色图像通过交互/手动方式阈值单色图像或彩色图像的单个色带研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MFC ExtTextOut函数学习

ExtTextOut - 扩展的文本输出; win32 api的声明如下; ExtTextOut( DC: HDC; {设备环境句柄} X, Y: Integer; {起点坐标} Options: Longint; {选项} Rect: PRect; {指定显示范围; 0 表示限制范围} Str: PChar; {字符串…