剑指 Offer 34. 二叉树中和为某一值的路径 / LeetCode 113. 路径总和 II(深度优先搜索)

news2024/11/19 13:36:40

题目:

链接:剑指 Offer 34. 二叉树中和为某一值的路径;LeetCode 113. 路径总和 II
难度:中等

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

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

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

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

输入:root = [1,2], targetSum = 0
输出:[]

提示:

  • 树中节点总数在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

深度优先搜索(二叉树先序遍历):

简单的深搜。用一个遍历数组path记录遍历路径,仅在遍历到叶子节点时将path路径中的节点计算总和并判断是不是等于目标和,遍历到非叶子节点时继续向左右子树搜索。一个分支遍历完,回溯时将当前节点从遍历路径中删除。
详细请看代码注释。

代码:

/**
 * Definition for a binary tree node.
 * 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:
    vector<vector<int>> ans;  // 所有目标路径
    vector<int> path;  // 记录深搜遍历的路径
    int targetSum;  // 给定目标
    void dfs(TreeNode* root, vector<int> &path) { 
        path.emplace_back(root->val);  // 遍历到的节点加入遍历路径中
        if(root->left == nullptr && root->right == nullptr) {  // 叶子结点,计算路径总和
            int sum = 0;
            for(auto a : path) sum += a;
            if(sum == targetSum) ans.emplace_back(path);  // 路径总和等于给定目标和
        }
        else {  // 非叶子节点
            if(root->left != nullptr) dfs(root->left, path);  // 向左子树搜索并传递当前遍历路径
            if(root->right != nullptr) dfs(root->right, path);  // 向右子树搜索并传递当前遍历路径
        }
        path.pop_back();  // 当前分支遍历完,回溯时将当前节点从遍历路径中删除
    }
    vector<vector<int>> pathSum(TreeNode* root, int target) {
        if(root == nullptr) return ans;  // 空树没有目标路径
        targetSum = target;
        dfs(root, path);
        return ans;
    }
};

时间复杂度:O(N2)。
空间复杂度:O(N)。

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

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

相关文章

身为程序员,你有哪些提高写代码效率的黑科技?

目录 1、Google/Stackoverflow——搜索解决方案的能力 2、低代码平台——提供可复用的轮子 3、人工智能——帮你写代码 4、学会话术——消除烦恼 5、 按时上下班&#xff0c;一周工作 5 天&#xff0c;养足精神以更高效地写代码。 首先&#xff0c;每个程序员都是会利用工…

GPU理解

什么是GPU GPU(Graphics Processing Unit)代表图形处理单元。该术语通常与图形卡或视频卡等术语互换使用。从技术上讲&#xff0c;GPU 是第三方显卡或主板上的主要图形处理芯片。 GPU 与 CPU不同。CPU 是中央处理器&#xff0c;它是计算机的主要大脑。GPU 专用于执行在计算机…

操作系统内存管理笔记

计算机的硬件设备 计算机的硬件设备中&#xff0c;有三个部件最为关键&#xff0c;它们分别是中央处理器CPU、内存和I/O控制芯片。 系统软件 系统软件可以分成两块&#xff0c;一块是平台性的&#xff0c;比如操作系统内核、驱动程序、运行库和数以千计的系统工具&#xff1…

文献阅读(51)—— Transformer 用于中国空气质量检测

文献阅读&#xff08;51&#xff09;—— Transformer 用于中国空气质量检测 文章目录 文献阅读&#xff08;51&#xff09;—— Transformer 用于中国空气质量检测先验知识/知识拓展文章结构背景文章方法1. Dartboard Spatial MSA(DS-MSA)2. CT-MSA3. 自上而下的随机阶段 文章…

Tapdata 的 ∞ 实践:中小企业如何轻量、高效地搭建起一个灵活易用的数字化平台

数字化浪潮的裹挟下&#xff0c;企业的转型之路正在变得愈加清晰。 然而在数字化转型这条企业生存和发展的必由之路上&#xff0c;更易受到市场变化冲击、所处环境竞争压力更大的中小企业无疑在面临更多的困难和挑战。一方面&#xff0c;中小企业为了顺应时代潮流、适应市场需…

jQuery移动端日期组件,H5移动端日期组件,MUI移动端日期组件,移动端简单的日期组件

前言 比较简单 H5移动端日期组件&#xff0c;使用的是MUI官方JS组件&#xff0c;因为不想自己写一个所以直接拿来改动一下用了 效果图 实现 准备工作 到官网下载css和js&#xff1a;https://dev.dcloud.net.cn/mui/ 到官网查看API&#xff1a;https://dev.dcloud.net.cn/mu…

中国社科院与美国杜兰大学金融管理硕士项目——迎接立夏,切莫忘记自我成长

五月的风吹走了春季&#xff0c;今天我们迎来立夏。作为夏季的第一个节气&#xff0c;立夏常被人们当做万物蓄满能量&#xff0c;即将加速生长的标志。而在职的我们&#xff0c;也应该跟这世间万物一样&#xff0c;在季节交替之时沉淀自己、努力向上成长。在社科院与杜兰大学金…

推荐6个我经常逛的“小网站”,嘿嘿嘿!!!

如今&#xff0c;全球互联网上已经有超过 17 亿个网站。除了全球那些主流网站被大家所熟知外&#xff0c;其实还有很多很多网站&#xff0c;被淹没在了互联网世界中。 每次发现优质的内容都会第一时间给大家分享出来&#xff0c;不管是软件&#xff0c;插件&#xff0c;脚本还…

vscode 实现代码编译

vscode 实现代码编译 之前一直纠结用vascode的编译按钮实现编译&#xff0c;这样就需要额外配置json文件&#xff0c;会非常麻烦&#xff0c;其实vscode也支持用编译命令&#xff0c;具体步骤如下&#xff1a; 新建makefile文件&#xff0c;文件内容如下&#xff1a; target: g…

Activity四种启动模式分析

一、前言 在初学Android的时候&#xff0c;几乎所有的学习资料都会提到Activity有四种启动模式&#xff1a; standardsingleTopsingTasksingleInstance 而提到这四种启动方式的差异&#xff0c;必然要提到一个重要的概念Activity的Task任务栈&#xff0c;我们需要明确的一点是…

vue3之vite创建H5项目之4 ( 自动导入api、按需引入van)

vue3之vite创建H5项目之4 1:自动导入vue3相关api之ref等 &#xff08;unplugin-auto-import&#xff09; pnpm i unplugin-auto-import -D 1-1 自动导入vue3相关api之ref 1-1 vite.config.ts 配置 import AutoImport from "unplugin-auto-import/vite"export de…

【操作系统OS】学习笔记第三章 内存管理【哈工大李治军老师】更新中...

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…

RocketMQ的下载及安装以及历史和发展

目录 RocketMQ历史及发展RocketMQ的下载及安装下载安装windows下的安装下载配置环境变量启动注意事项 控制台插件环境要求下载启动控制台使用文档Linux下的安装环境要求启动注意事项控制台插件 RocketMQ源码安装与调试下载环境要求IntelliJ IDEA导入启动RocketMQ源码 RocketMQ历…

2023天猫运营数据分析:Q1防晒品类行业分析报告

随着防晒观念的普及&#xff0c;日常防晒已逐步成为很多人的习惯。加之今年消费市场日渐复苏&#xff0c;消费者的“报复性出游”也加速了防晒市场的发展。 市场对防晒品类在2023年的表现抱有更高的期待&#xff0c;防晒品类有望成为整个化妆品消费领域复苏较好的赛道。 根据鲸…

项目准备工作、笔试题目讲解

目录 讲一下冯诺依曼体系结构输入的处理 查bug基本步骤 我希望你重点可以讲一讲处理的这个过程&#xff0c;该如何处理呢&#xff1f; 介绍一下Maven Maven如何配置阿里云镜像&#xff1f; 介绍一下springboot 介绍一下mybatis 为什么有些人说mybatis不是很好&#xff1f…

五种网络IO模型:阻塞式IO 非阻塞式IO IO复用(IO multiplexing) 信号驱动式IO 异步IO

文章目录 五种网络IO模型举例说明阻塞式I/O模型非阻塞式I/OI/O多路复用信号驱动式I/O异步I/O比较结果总结同步 异步 阻塞 非阻塞阻塞/非阻塞&#xff1a;同步/异步&#xff1a; 举例子&#xff1a;小宇去新华书店买书场景&#xff1a; 五种网络IO模型 阻塞式IO 非阻塞式IO…

联通云正式启动“同舟计划”,点燃数字引擎赋能产业未来

科技云报道原创。 当数据成为重要生产要素&#xff0c;算力被视为数字时代的核心生产力&#xff0c;以此为基础的“算网融合”将激发数字经济新动能。 作为云计算国家队&#xff0c;联通云在不断寻求技术突破、深度扎根实体产业的过程中&#xff0c;开启了自我持续进化之路。…

微服务 - Kong Http Api 实现负载均衡、jwt认证、限流、黑白名单

建立/激活链接 使用Kong的第一步是激活链接&#xff0c;登录Kong管理后台&#xff0c;找到 Connections&#xff0c;把Kong的Api链接上,因为我本地的端口进行了映射&#xff0c;所以需要找到Docker的network 上的ip&#xff0c;进行绑定, ip 地址 172.19.0.3 docker network …

Java多线程基础-8:单例模式及其线程安全问题

单例模式是经典的设计模式之一。什么是设计模式&#xff1f;代码的设计模式类似于棋谱&#xff0c;棋谱就是一些下棋的固定套路&#xff0c;是前人总结出来的一些固定的打法。依照棋谱来下棋&#xff0c;不说能下得非常好&#xff0c;但至少是有迹可循&#xff0c;不会下得很糟…

JAVA9新特性

JAVA9新特性 概述 ​ 经过4次推迟&#xff0c;历经曲折的Java9最终在2017年9月21日发布。因为里面加入的模块化系统&#xff0c;在最初设想的时候并没有想过那么复杂&#xff0c;花费的时间超出预估时间。距离java8大约三年时间。 ​ Java 9提供了超过150项新功能特性&#x…