剑指Offer || 050.路径总和|||

news2024/11/17 19:32:58

题目

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

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

示例 1:

输入: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 <= Node.val <= 109 
  • -1000 <= targetSum <= 1000 

注意:本题与主站 437 题相同:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

LCR 050. 路径总和 III - 力扣(LeetCode)

题解

思路一:暴力解法,枚举每个结点作为根,在对枚举的每颗子树进行dfs(即两次dfs),判断是否存在targetSum。 注意:过程sum可能会溢出,故设为long。

代码:

class Solution {
    long target;
    int ans = 0;

    public void dfs(TreeNode t, long sum) {
        if (t == null) return;
        if (sum + t.val == target)
            ans++;
        dfs(t.left, sum + t.val);
        dfs(t.right, sum + t.val);
    }

    public void dfs1(TreeNode t){
        if(t == null) return;
        dfs(t, 0);
        dfs1(t.left);
        dfs1(t.right);
        
    }
    public int pathSum(TreeNode root, int targetSum) {
        this.target = targetSum;
        dfs1(root);
        return ans;
    }
}

思路二:前缀和思想。每次到一个新的结点,总是会重复计算结点间的路径和,于是可以使用一个map<从根节点到当前结点的路径长度,有多少条该路径>,来记录路径sum,然后当前sum-之前的sum==target的,即是一条路径。

有两个点需要注意:1.根节点为空路径,map要添加<0,1>。

                                 2.每个子树操作完之后,要消除该子树对其他子树的影响,即map的value值是会减少的。

代码:

class Solution {
	//map<从根节点到当前结点的路径长度,有多少条该路径>
    Map<Long, Integer> sumCountMap = new HashMap<Long, Integer>();
    public int pathSum(TreeNode root, int targetSum) {
        if (root == null)  return 0;
        sumCountMap.put(0L, 1);//起点的空路径
        return getCounts(root, root.val, targetSum);
    }
    public int getCounts(TreeNode node, long sum, int targetSum) {
    	//递归的每个子树里都有一个新的count加进来。
        int count = sumCountMap.getOrDefault(sum - targetSum, 0);
        sumCountMap.put(sum, sumCountMap.getOrDefault(sum, 0) + 1);
        if (node.left != null) 
            count += getCounts(node.left, sum + node.left.val, targetSum);
        if (node.right != null) 
            count += getCounts(node.right, sum + node.right.val, targetSum);
        //从子树里退出去的时候,消除当前的sum数量对其他子树的影响
        sumCountMap.put(sum, sumCountMap.get(sum) - 1);
        return count;
    }
}

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

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

相关文章

DETR原理与代码超详细解读

文章目录 前言一、DETR论文原理1、DETR整体介绍2、DETR论文贡献3、DETR模型框架4、DETR基于二分图匹配的LOSS 二、DETR环境安装1、安装基础环境2、pycocotools安装3、其它环境安装4、环境验证5、训练与推理效果显示 三、数据准备1、coco 数据格式2、修改数据 四、DETR加载数据代…

Git的安装

前置 知道自己电脑上跑的是什么系统 查看电脑位数 省事的一种办法 Windows 在cmd中输入如下命令 wmic os get osarchitecture看命令结果即可 省事的一种办法 Linux 直接在终端中输入如下命令 uname -m若结果是x86_64就是64位的&#xff0c;反之32位 图形化的办法 Wind…

Peter算法小课堂—正整数拆分

大家可能会想&#xff1a;正整数拆分谁不会啊&#xff0c;2年级就会了&#xff0c;为啥要学啊 例题 正整数拆分有好几种&#xff0c;这里我们列举两种讲。 关系 我们看着第一幅图&#xff0c;头向左转90&#xff0c;记住你看到的图&#xff0c;再来看第二幅图&#xff0c;你…

lnmp架构部署Discuz论坛并配置重定向转发

lnmp架构部署Discuz论坛并配置重定向转发 文章目录 lnmp架构部署Discuz论坛并配置重定向转发环境说明部署Discuz论坛系统下载Discuz论坛系统代码包&#xff0c;官网地址如下&#xff1a;部署Discuz论坛系统步骤&#xff1a;解压安装Discuz源码包配置虚拟主机进入Discuz安装界面…

pytest利用request fixture实现个性化测试需求详解

这篇文章主要为大家详细介绍了pytest如何利用request fixture实现个性化测试需求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下− 前言 在深入理解 pytest-repeat 插件的工作原理这篇文章中&#xff0c;我们看到pytest_repeat源码中有这样一段 import pyt…

YOLOv5算法改进(14)— 如何去更换主干网络(3)(包括代码+添加步骤+网络结构图)

前言:Hello大家好,我是小哥谈。为了给后面YOLOv5算法的进阶改进奠定基础,本篇文章就继续通过案例的方式给大家讲解如何在YOLOv5算法中更换主干网络,本篇文章的特色就是比较浅显易懂,附加了很多的网络结构图,通过结构图的形式向大家娓娓道来,希望大家学习之后能够有所收获…

msvcr120.dll缺失怎么修复,快速修复msvcr120.dll丢失的三个有效方法

随着计算机技术的不断发展&#xff0c;我们在使用软件或游戏时经常会遇到各种错误提示&#xff0c;其中找不到msvcr120.dll就是一种常见的错误。那么&#xff0c;msvcr120.dll是什么&#xff1f;它的作用是什么&#xff1f;如何修复这一错误呢&#xff1f;本文将为您详细介绍几…

Python学习基础笔记七十九——Socket编程2

应用消息格式&#xff1a; 为什么要定义消息格式&#xff1f; 我们发送的消息就是要传递的内容&#xff0c;比如字符串。 我们在企业中开发的程序通讯&#xff0c;消息往往是有格式定义的。消息格式的定义可以归入OSI网络模型的表示层。 比如&#xff1a;定义的消息包括消息…

电子技术基础(三)__第7章 时序逻辑电路_第7篇之解题方法与步骤

我们必须牢记这样一句&#xff1a; 先列出输入逻辑式&#xff0c;即驱动方程&#xff0c; 然后将驱动方程代入触发器的特征方程&#xff0c; 得到状态方程(也称 次态方程)&#xff0c; 最后写出输出方程。 二 看例题 2022.4 真题 第38题 分析: 此题乍一看&#xff0c;可能有点…

jvm 各个版本支持的参数 容器化部署

知道一些 jvm 调优参数&#xff0c;但是没有找到官网对应的文档&#xff0c;在网上的一些文章偶然发现&#xff0c;记录一下。 https://docs.oracle.com/en/java/javase/ 包含各个版本 jdk 8 分为 windows 和 unix 系统 https://docs.oracle.com/javase/8/docs/technotes/too…

Volatile 可以保证什么特性?有什么作用?

Volatile 可以保证什么特性&#xff1f;有什么作用&#xff1f; 可以保证可见性&#xff0c;有序性&#xff0c;禁止指令重排序。但是不能保证原子性。线程上下文切换的时候&#xff0c;还是有可能出现线程安全问题。 cpu 都是把数据从内存拉取到自己的缓存中进行运算&#xff…

在Espressif-IDE中使用Wokwi仿真ESP32

陈拓 2023/10/17-2023/10/19 1. 概述 在Espressif-IDE v2.9.0版本之后可直接在IDE中使用Wokwi模拟器。 1.1 什么是 Wokwi 模拟器&#xff1f; Wokwi 是一款在线电子模拟器&#xff0c;支持模拟各种开发板、元器件和传感器&#xff0c;例如乐鑫产品 ESP32。 Wokwi 提供基于浏…

Vue3.0的设计目标是什么?做了哪些优化

一、设计目标 不以解决实际业务痛点的更新都是耍流氓&#xff0c;下面我们来列举一下Vue3之前我们或许会面临的问题 随着功能的增长&#xff0c;复杂组件的代码变得越来越难以维护缺少一种比较「干净」的在多个组件之间提取和复用逻辑的机制类型推断不够友好bundle的时间太久…

游戏行业多元化发展,手游品牌强势出圈的秘诀是什么?

消费观念的转变和社会风气的逐渐开放使手游市场日趋成熟&#xff0c;如今的手游市场面临不少机遇与挑战&#xff0c;游戏行业的多元化发展使玩家们对手游的质量要求更进一步&#xff0c;那么在竞争激烈的手游市场中&#xff0c;手游品牌如何在拥挤的市场中获取更多曝光机会呢&a…

零基础也能制作电子期刊,这个网站你一定不能错过

对于那些想要制作电子期刊但又没有任何基础的人来说&#xff0c;这个网站是一个非常不错的选择。它提供了一系列简单易用的工具和资源&#xff0c;可以帮助你轻松地创建出专业水准的电子期刊。这个网站就是FLBOOK在线制作电子杂志平台。 首先&#xff0c;FLBOOK提供了丰富的模板…

windows 11 安装PHP8.2

环境说明 windows:windows 11 x64apache: Apache/2.4.43php :php-8.2.11 一.php 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php8apache2_4.dll这个文件&#xff1b;如果使用Apache作为服务器…

图片拼接:如何将一堆杂乱无章的图片变成一个有意义的、协调的整体

在数字时代的汪洋大海中&#xff0c;我们常常被无数的图片所包围。如何将这些杂乱无章的图片变成一个有意义的、协调的整体&#xff0c;仿佛是一个充满挑战的英雄之旅。本文将为你揭示这个过程的秘密&#xff0c;并介绍一种创新性的图片管理方法。 面对图片拼接的挑战 图片拼…

【Java 进阶篇】Bootstrap 快速入门

Bootstrap 是一个流行的开源前端框架&#xff0c;它使网页开发更加容易和高效。无论您是一个有经验的开发者还是一个初学者&#xff0c;本文将带您深入了解 Bootstrap&#xff0c;从基础概念到实际示例&#xff0c;以帮助您快速入门这个强大的工具。 什么是 Bootstrap&#xf…

淘宝/1688API-item_search_shop - 获得店铺的所有商品

进入测试地址&#xff1a;点击测试 公共参数 API返回结果 {"items": {"page": "1","total_results": "21","real_total_results": "21","item": [{"num_iid": 671797981398,"…

【二叉树进阶】AVLTree-平衡二叉搜索树

文章目录 1、AVL树1.1、AVL树的概念1.2 AVL树节点的定义1.3 AVL树 - 插入节点1.3.1 插入新节点1.3.2 更新树的平衡因子1.3.3 根据更新后BF的情况&#xff0c;进行平衡化操作 2 AVL树的验证2.1 AVL树 - 删除节点&#xff08;了解&#xff09;2.2 AVL树的性能 1、AVL树 1.1、AVL…