leetcode 437. Path Sum III 路径总和 III(中等)

一、题目大意

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

示例 1:

leetcode 437. Path Sum III 路径总和 III(中等)

输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。

示例 2:

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

提示:

  • 二叉树的节点个数的范围是 [0,1000]
  • -109
  • -1000

来源:力扣(LeetCode
链接:https://leetcode.cn/problems/path-sum-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

双层递归实现,注意分情况考虑:1、如果选取该节点加入路径,则之后必须继续加入连续节点,或停止加入节点;2、如果不选取该节点加入路径,则对其左右节点进行重新考虑。因此一个方便的方法是我们创建一个辅函数,专门用来计算连续加入节点的路径。

三、解题方法

3.1 Java实现

/**
 * Definition for a binary tree node.

 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
    public int pathSum(TreeNode root, int targetSum) {
        if (root == null) {
            return 0;
        }
        return pathSumStartWithRoot(root, targetSum) + pathSum(root.left, targetSum) + pathSum(root.right, targetSum);
    }

    /**
     * 注意,这里入参类型为long,否则通不过下面这个用例
     * 这里root.val太大,递归调用多了targetNum-root.val就会溢出整数型的最小值,把参数换成long即可
     * [1000000000,1000000000,null,294967296,null,1000000000,null,1000000000,null,1000000000]
     * 0
     */
    int pathSumStartWithRoot(TreeNode root, long targetSum) {
        if (root == null) {
            return 0;
        }

        int count = root.val == targetSum ? 1 : 0;
        count += pathSumStartWithRoot(root.left, targetSum - root.val);
        count += pathSumStartWithRoot(root.right, targetSum - root.val);
        return count;
    }
}

四、总结小记

  • 2022/9/8 求人不如求己

Original: https://www.cnblogs.com/okokabcd/p/16670777.html
Author: okokabcd
Title: leetcode 437. Path Sum III 路径总和 III(中等)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620674/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JSP中的EL 表达式

    JSP中的EL 表达式 什么是 EL 表达式,EL 表达式的作用? EL 表达式搜索域数据的顺序 EL 表达式输出 Bean 的普通属性,数组属性,List 集合属性,map 集合…

    数据库 2023年6月11日
    073
  • 数据库死锁分析(行锁、间隙锁)

    分享因遇到缝隙锁而导致的死锁案例。文章最后有一个知识总结,以供参考。 [En] Share a deadlock case caused by a gap lock encount…

    数据库 2023年5月24日
    092
  • 994.腐烂的橘子

    994.腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘…

    数据库 2023年6月16日
    086
  • 做自动化测试选择Python还是Java?

    你好,我是测试蔡坨坨。 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言。 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件…

    数据库 2023年6月11日
    0104
  • 2 Java中 == 和 equals 和 hashCode 的区别

    ==是一个比较运算符; 若比较的是基本数据类型,则比较的是值; 若比较的是引用数据类型,则比较的是它们在内存中的内存地址。 说明:对象是存放在堆中,栈中存放的是对象的引用,因此==…

    数据库 2023年6月6日
    095
  • 深入浅出的分析 Properties

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、Ide…

    数据库 2023年6月14日
    077
  • 译文 | MySQL 8.0 密码管理策略(一)

    MySQL 8.0 在密码管理方面有很多改善,本文将介绍以下两个特性。 密码重用策略 生成随机密码 简单地说,当您设置新密码时,您可以限制使用以前使用的密码。有两种策略: [En]…

    数据库 2023年5月24日
    080
  • hosts文件作用

    1、加快域名解析对于要经常访问的网站,我们可以通过在Hosts中配置域名和IP的映射关系,提高域名解析速度。由于有了映射关系,当我们输入域名计算机就能很快解析出IP,而不用请求网络…

    数据库 2023年6月11日
    063
  • 线上问题检测

    ​ jdk 自带工具 1、通过top找到CPU占…

    数据库 2023年6月6日
    092
  • [LeetCode]剑指 Offer 17. 打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n = 1输出: [1,2,3…

    数据库 2023年6月9日
    087
  • javax.mail.MessagingException: Unknown SMTP host: smtp.163.com;

    报错信息如下: javax.mail.MessagingException: Unknown SMTP host: smtp.163.com;nested exception is…

    数据库 2023年6月11日
    069
  • SQLZOO练习7–Using NULL

    teacher表: iddeptnamephonemobile 101 1 Shrivell 2753 07986 555 1234 102 1 Throd 2754 07122 …

    数据库 2023年5月24日
    075
  • list对象中的数据如何去重呢?

    下文笔者讲述list对象的去重方法分享,list的实现类是我们存储数据的容器, 当里面存储的对象存在重复值时,我们该如何对其进行去重操作呢? 下文笔者将一一道来,首先我们需了解对象…

    数据库 2023年6月11日
    094
  • Javaer 面试必背系列!超高频八股之三色标记法

    可达性分析可以分成两个阶段 根节点枚举 从根节点开始遍历对象图 前文提到过,在可达性分析中,第一阶段 “根节点枚举” 是必须 STW 的,不然如果分析过程中…

    数据库 2023年6月6日
    0103
  • Navicat 连接服务器不成功(Access denied for user ‘root’@ ‘*.*.*.*’ (using password: YES))

    出现的原因一般是服务器的root用户没有开启访问权限,一般来说值允许本地的访问。 解决方法: 一:第一种方法 1、首先打开xshell连接服务器的终端 2、以root权限登录 my…

    数据库 2023年6月11日
    068
  • JUC学习笔记(五)

    创建线程的方法-一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是,Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们…

    数据库 2023年6月6日
    0127
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球