leetcode:112. 路径总和

ops/2024/11/23 9:05:10/

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

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

示例 1:

leetcode.com%2Fuploads%2F2021%2F01%2F18%2Fpathsum1.jpg&pos_id=zyBM98zI" width="534" />

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

示例 2:

leetcode.com%2Fuploads%2F2021%2F01%2F18%2Fpathsum2.jpg&pos_id=Haqt9Ebs" width="534" />

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

提示:

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

步骤1: 问题分析

问题性质
  • 本题是一个经典的二叉树路径和问题,需要判断是否存在一条从根节点到叶子节点的路径,其路径上节点值的和等于给定的 targetSum
输入条件
  1. 根节点 root:二叉树的根节点。
  2. 目标和 targetSum:一个整数,表示目标路径和。
输出条件
  • 返回 true 如果存在符合条件的路径;否则返回 false
限制与边界条件
  1. 节点范围:节点数目在 [0, 5000] 之间。
  2. 节点值范围[-1000, 1000]
  3. 边界条件
    • 树为空(root == null),返回 false
    • 单节点树,检查该节点值是否等于 targetSum

步骤2: 解题步骤与算法设计

算法设计思路
  • 本题的核心是遍历二叉树并计算路径和,判断是否存在等于 targetSum 的路径。
  • 适合的算法
    1. 深度优先搜索(DFS)
      • 利用递归,沿着路径累加节点值。
      • 如果到达叶子节点并且路径和等于 targetSum,返回 true
    2. 广度优先搜索(BFS)
      • 利用队列同时存储节点和当前路径和,逐层遍历树。
      • 在遍历过程中检查是否存在满足条件的路径。
最佳算法选择
  • DFS 是最佳选择,因为可以直接递归到叶子节点,逻辑简单且代码简洁。
  • 时间复杂度:O(N),其中 N 是节点数,最坏情况下需要访问所有节点。
  • 空间复杂度:O(H),其中 H 是树的高度,递归栈的深度。
具体解题步骤
  1. 边界条件判断
    • 如果 root == null,直接返回 false
  2. 递归判断路径和
    • 当前节点的路径和为 当前路径和 + 当前节点值
    • 如果当前节点是叶子节点且路径和等于 targetSum,返回 true
    • 否则递归地检查左子树和右子树。
  3. 综合左右子树结果
    • 左右子树只要有一个返回 true,最终结果就为 true

步骤3: C++ 代码实现

步骤4: 启发与优化

启发
  • 递归可以高效解决树相关问题,但需要注意递归栈的深度限制。
  • 考虑边界条件(如空树或单节点树)是避免错误的重要一环。
优化
  • 若树很深,递归可能导致栈溢出,改用迭代方法(BFS)可以避免这一问题。

步骤5: 实际应用场景

行业应用

场景:电商网站的推荐引擎

  • 应用示例:在商品推荐中,构建二叉树表示用户点击路径(每个节点是用户点击的商品),目标是判断是否存在一条点击路径,满足总花费等于用户预算。
  • 实现:将用户预算作为 targetSum,树节点值为商品价格,利用上述算法快速判断是否有符合预算的商品组合路径。

http://www.ppmy.cn/ops/136024.html

相关文章

如何将 Anaconda 源切换到国内镜像以提高下载速度:详细教程 ubuntu20.04 Pytorch

如何将 Anaconda 源切换到国内镜像以提高下载速度&#xff1a;详细教程 为了确保详尽和精确地说明在Ubuntu 20.04上将Anaconda源切换到国内镜像的步骤&#xff0c;我们将进一步详细化每个操作步骤&#xff0c;提供更具体的命令和解释&#xff0c;以确保即使是对Linux不熟悉的用…

Java爬虫与淘宝API接口:深度解析销量和商品详情数据获取

引言 在电商领域&#xff0c;数据的重要性不言而喻。淘宝作为中国最大的电商平台之一&#xff0c;其商品销量和详情数据对于市场分析、库存管理、销售策略制定等方面具有极高的价值。Java作为一种广泛应用的编程语言&#xff0c;结合淘宝API接口&#xff0c;可以有效地进行数据…

为什么transformer的时间复杂度是N的平方,具体是里面的哪一个计算流程最占用时间

Transformer的时间复杂度为 O(N2)&#xff0c;其中 NN 是输入序列的长度。这一复杂度主要来源于自注意力机制&#xff08;self-attention mechanism&#xff09;的计算过程。 在Transformer模型中&#xff0c;自注意力机制的核心步骤是计算查询&#xff08;Query&#xff09;、…

【POSIX】posix_fadvise()接口

前言 posix_fadvise()是一个 POSIX 标准的系统调用&#xff0c;用于为打开的文件描述符提供建议&#xff0c;以优化文件 I/O 操作。它允许应用程序指示内核如何处理与特定文件的读取和写入操作。 函数原型 #include <fcntl.h>int posix_fadvise(int fd, off_t offset,…

Mac M4苹果电脑M4上支持的AE/PR/PS/AI/ID/LrC/AU/DC/ME有哪些?

Mac 首次搭载 M4 芯片&#xff0c;为创业者、学生、创作者等用户带来出众性能。M4 芯片配备了最多 10 核中央处理器&#xff0c;包括 4 颗性能核心和最多 6 颗能效核心。中央处理器性能相比 M1 提升最多可达 1.8 倍&#xff0c;让使用 Safari 浏览器和 Excel 等 app 进行多任务…

秋意浓,森林披金装

秋意浓&#xff0c;森林披金装&#xff0c; 枫叶如火&#xff0c;漫山遍野狂。 松间轻风送寒意&#xff0c; 鸟鸣悠扬入云翔。 林间小径蜿蜒行&#xff0c; 落叶铺成金色毯。 溪水潺潺绕石转&#xff0c; 映出天边一抹霞。 野菊点缀在草间&#xff0c; 白云悠悠随意闲。…

网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务

网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务 IDS入侵检测系统 Intrusion Detection System 安全检测系统&#xff0c;通过监控网络流量、系统日志等信息&#xff0c;来检测系统中的安全漏洞、异常行为和入侵行为。 分为&am…

【Android】android compat理解

1&#xff0c;前提 即便是在同一手机上安装的不同apk&#xff0c;其编译的apk不同&#xff0c;也会导致行为上的差异。如SDK34有限制后台启动&#xff0c;但如果安装的apk所依赖的sdk是33&#xff0c;则不会表现出此差异。这是如何实现的呢&#xff1f;其实&#xff0c;本质是…