C++算法练习-day37——112.路径总和

题目来源:. - 力扣(LeetCode)

题目思路分析

题目要求判断一棵二叉树中是否存在一条从根节点到叶子节点的路径,使得路径上所有节点的值相加等于一个给定的目标和(targetSum)。为了解决这个问题,我们可以使用深度优先搜索(DFS)策略。从根节点开始,递归地向下遍历树,每次将当前节点的值从目标和中减去,并检查是否到达叶子节点且目标和恰好减到0。如果在某个分支上找到了符合条件的路径,则返回true;如果遍历完所有可能的路径都没有找到符合条件的路径,则返回false

代码:

#include <iostream>  // 二叉树节点的定义  
struct TreeNode {  int val;  TreeNode *left;  TreeNode *right;  TreeNode() : val(0), left(nullptr), right(nullptr) {}  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}  TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}  
};  class Solution {  
public:  // 判断是否存在从根节点到叶子节点的路径,路径上节点值之和等于目标和  bool hasPathSum(TreeNode* root, int targetSum) {  // 如果根节点为空,则不存在路径,返回false  if (!root) {  return false;  }  // 从目标和中减去当前节点的值  targetSum -= root->val;  // 如果当前节点是叶子节点(没有左右子节点),则检查目标和是否减到0  if (!root->left && !root->right) {  return targetSum == 0;  }  // 递归地在左子树和右子树中查找路径  // 如果左子树或右子树中存在符合条件的路径,则返回true  return hasPathSum(root->left, targetSum) || hasPathSum(root->right, targetSum);  }  
};  // 示例用法  
int main() {  // 构造一棵二叉树  TreeNode* root = new TreeNode(5);  root->left = new TreeNode(4);  root->right = new TreeNode(8);  root->left->left = new TreeNode(11);  root->right->left = new TreeNode(13);  root->right->right = new TreeNode(4);  root->left->left->left = new TreeNode(7);  root->left->left->right = new TreeNode(2);  root->right->right->right = new TreeNode(1);  Solution solution;  int targetSum = 22;  bool result = solution.hasPathSum(root, targetSum);  // 输出结果  std::cout << (result ? "存在路径" : "不存在路径") << std::endl;  // 释放内存(这里省略了详细的内存释放代码,实际使用时需要注意避免内存泄漏)  return 0;  
}

注释详解

  1. 检查根节点是否为空:如果根节点为空,则直接返回false,因为不存在任何路径。
  2. 更新目标和:将当前节点的值从目标和中减去,以便在递归过程中检查剩余路径上的节点值之和是否等于0。
  3. 检查叶子节点:如果当前节点是叶子节点(即没有左右子节点),则检查目标和是否减到0。如果是,则返回true,表示找到了一条符合条件的路径。
  4. 递归查找:如果当前节点不是叶子节点,则递归地在左子树和右子树中查找是否存在符合条件的路径。使用逻辑或操作符||连接两个递归调用,因为只要左子树或右子树中存在符合条件的路径,整个函数就应该返回true

知识点摘要

  1. 深度优先搜索(DFS):一种图搜索算法,用于遍历或搜索图形数据结构中的节点。DFS通过递归或栈来实现,沿着树的深度遍历节点,直到达到叶子节点或遍历完所有可能的分支。
  2. 二叉树:一种树形数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点。
  3. 递归:一种在函数内部调用自身的方法,通常用于解决可以分解为相似子问题的问题。

通过上述分析,我们了解了如何使用深度优先搜索(DFS)来判断一棵二叉树中是否存在一条从根节点到叶子节点的路径,使得路径上所有节点的值相加等于一个给定的目标和。DFS通过递归地遍历树的所有可能路径,并检查每条路径上节点值之和是否等于目标和,从而找到符合条件的路径。这种方法是直观且有效的,适用于解决类似的问题。在实际编程中,我们还需要注意内存管理,避免内存泄漏等问题。

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

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

相关文章

使用 Python 调用云 API 实现批量共享自定义镜像

本文介绍如何通过 Python SDK 调用 API 接口&#xff0c;通过子用户批量共享云服务器自定义镜像。若您具备类似需求&#xff0c;或想了解如何使用 SDK&#xff0c;可参考本文进行操作。 前提条件 已创建子用户&#xff0c;并已具备云服务器及云 API 所有权限。 创建子用户请…

[mysql]修改表和课后练习

目录 DDL数据定义语言 添加一个字段 添加一个字段到最后一个 添加到表中的第一个一个字段 选择其中一个位置: 修改一个字段:数据类型,长度,默认值(略) 重命名一个字段 删除一个字段 重命名表 删除表 清空表 DCL中事务相关内容 DCL中COMMIT和ROLLBACK的讲解 对比TR…

Python异常检测 - LSTM(长短期记忆网络)

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 Python异常检测- DBSCAN Python异常检测- 单类支持向量机(…

常见Transformer位置编码

文章目录 概述绝对位置编码相对位置编码T5 BiasALiBiRoPE 参考资料 概述 相对于RNN这样的序列模型来说&#xff0c;Transformer可并行是一个很大的优势&#xff0c;但可并行性带来一个问题&#xff0c;由于不是从前到后&#xff0c;所以模型对于位置信息是不敏感的。于是在Tra…

【IEEE出版 | EI稳定检索】2024智能机器人与自动控制国际学术会议 (IRAC 2024,11月29-12月1日)

2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09; 2024 International Conference on Intelligent Robotics and Automatic Control 官方信息 会议官网&#xff1a;www.icirac.org 2024 International Conference on Intelligent Robotics and Autom…

Golang | Leetcode Golang题解之第535题TinyURL的加密与解密

题目&#xff1a; 题解&#xff1a; import "math/rand"type Codec map[int]stringfunc Constructor() Codec {return Codec{} }func (c Codec) encode(longUrl string) string {for {key : rand.Int()if c[key] "" {c[key] longUrlreturn "http:/…

影响神经网络速度的因素- FLOPs、MAC、并行度以及计算平台

影响神经网络速度的四个主要因素分别是 FLOPs&#xff08;浮点操作数&#xff09;、MAC&#xff08;内存访问成本&#xff09;、并行度以及计算平台。这些因素共同作用&#xff0c;直接影响到神经网络的计算速度和资源需求。 1. FLOPs&#xff08;Floating Point Operations&a…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十六章 C++入门

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统

前言 现在已经学习了很多与Java相关的知识&#xff0c;但是迟迟没有进行一个完整的实践&#xff08;之前这个项目开发到一半&#xff0c;很多东西没学搁置了&#xff0c;同时原先的项目中也有很多的问题&#xff09;&#xff0c;所以现在准备从零开始做一个基于SpringBootVue的…

基于Matlab的语音识别

一、引言 语音识别技术是让计算机识别一些语音信号&#xff0c;并把语音信号转换成相应的文本或者命令的一种高科技技术。语音识别技术所涉及的领域非常广泛&#xff0c;包括信号处理、模式识别、人工智能等技术。近年来已经从实验室开始走向市场&#xff0c;渗透到家电、通信…

如何在 IntelliJ IDEA 中调整 `Ctrl+/` 快捷键生成注释的位置

前言 在使用 IntelliJ IDEA 编写代码时&#xff0c;注释是代码可读性和维护性的重要组成部分。IDEA 提供了快捷键 Ctrl/ 用于快速生成单行注释。然而&#xff0c;默认情况下&#xff0c;使用此快捷键生成的注释会出现在行首&#xff0c;导致注释与代码之间存在较大的空格&…

源鲁杯 2024 web(部分)

[Round 1] Disal F12查看: f1ag_is_here.php 又F12可以发现图片提到了robots 访问robots.txt 得到flag.php<?php show_source(__FILE__); include("flag_is_so_beautiful.php"); $a$_POST[a]; $keypreg_match(/[a-zA-Z]{6}/,$a); $b$_REQUEST[b];if($a>99999…

使用 ADB 在某个特定时间点点击 Android 设备上的某个按钮

前提条件 安装 ADB&#xff1a;确保你已经在计算机上安装了 Android SDK&#xff08;或单独的 ADB&#xff09;。并将其添加到系统环境变量中&#xff0c;以便你可以在命令行中运行 adb。 USB调试&#xff1a;确保 Android 设备已启用 USB 调试模式。这可以在设备的“设置” -…

数据库的使用02:SQLServer的连接字符串、备份、还原、SQL监视相关设置

目录 一、连接字符串 【本地连接字符串】 【远程连接字符串】 二、备份 三、还原 &#xff08;1&#xff09;还原数据库-bak、btn文件 &#xff08;2&#xff09;附加数据库mdf文件 四、SQL监视器的使用 一、连接字符串 【本地连接字符串】 server DESKTOP-FTH2P3S; Da…

Oracle视频基础1.3.6练习

1.3.6 以下是您的需求清单&#xff08;不含解决方案&#xff09;&#xff1a; 检查数据库启动情况等待会话结束&#xff0c;进行正常关机等待事务全部提交后再关机查看 alert 日志文件查看后台跟踪文件查看用户跟踪文件 检查数据库启动情况 ps -ef | grep oracle ipcs clear…

【大数据学习 | HBASE】hbase的原理与组成结构

1. hbase的简述 hbase作为google的大数据三篇比较重要的论文之一&#xff0c;它的起源叫做bigtable&#xff0c;意思非常简单就是大表的意思&#xff0c;是一个分布式存储很多数据的大型表格系统&#xff0c;它是对于hdfs中的数据不能直观查询和随机读写的病痛的一个补充和完善…

苍穹外卖Bug集合

初始化后端项目运行出现以下问题 以上报错是因为maven和jdk版本不符合&#xff0c;需要将jdk改成17&#xff0c;mavne改成3.9.9

【C++篇】在秩序与混沌的交响乐中: STL之map容器的哲学探寻

文章目录 C map 容器详解&#xff1a;高效存储与快速查找前言第一章&#xff1a;C map 的概念1.1 map 的定义1.2 map 的特点 第二章&#xff1a;map 的构造方法2.1 常见构造函数2.1.1 示例&#xff1a;不同构造方法 2.2 相关文档 第三章&#xff1a;map 的常用操作3.1 插入操作…

太空旅游:科技能否让星辰大海变为现实?

内容概要 在这个快速变化的时代&#xff0c;太空旅游成为了一个让人热血沸腾的话题。想象一下&#xff0c;坐在一颗漂浮的太空舱里&#xff0c;手中端着饮料&#xff0c;眺望着无尽的星辰大海&#xff0c;简直就像科幻电影中的情节一样。不过&#xff0c;这不仅仅是一个空洞的…

程序中怎样用最简单方法实现写excel文档

很多开发语言都能找到excel文档读写的库&#xff0c;但是在资源极其受限的环境下开发&#xff0c;引入这些库会带来兼容性问题。因为一个小功能引入一堆库&#xff0c;我始终觉得划不来。看到有项目引用的jar包有一百多个&#xff0c;看着头麻&#xff0c;根本搞不清谁依赖谁。…