当前位置: 首页 > news >正文

2025年- H54-Lc162--437. 路径总和 III(递归[回溯]OR深搜)--Java版

1.题目描述

在这里插入图片描述

2.思路

方法一:
在这里插入图片描述
对每个节点作为起点,查找从它往下延伸的路径,是否有路径和等于 targetSum。
外层 pathSum() 是遍历每一个节点(作为路径起点);

内层 rootSum() 是从当前节点往下查路径和。
方法二:
求不同路径,用递归,当然递归里面包括前中后的遍历。我们采用前序遍历(根左右),从父节点到孩子节点。’
在这里插入图片描述

3.代码实现

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;}}
public class H437 {//1.外层 pathSum() 是遍历每一个节点(作为路径起点);public int pathSum(TreeNode root, long targetSum) {if(root==null){return 0;}//从当前 root 节点开始,找以它为起点的所有路径,有多少条路径和是 targetSum,并把结果保存到 cnt 中。int cnt= rootSum(root,targetSum);
//        分别递归地处理 左子树 和 右子树,把它们作为新的起点继续找路径。
//
//        这两行的作用是:
//
//        假设 root 是路径起点我们处理完了,
//
//        现在尝试以 root.left 和 root.right 作为起点再处理。cnt=cnt+pathSum(root.left,targetSum);cnt=cnt+pathSum(root.right,targetSum);//返回当前节点(作为起点)以及左右子树中所有满足路径和的路径数。return cnt;}//2.内层 rootSum() 是从当前节点往下查路径和。public int rootSum(TreeNode root,long targetSum)//找出“以当前 root 为路径起点”有多少条路径,路径和等于 targetSum{int cnt=0;//  递归终止条件:节点为空,直接返回 0。if (root == null) {return 0;}// 如果当前节点值等于 targetSum,说明已经找到了一条符合要求的路径,计数器 ret++。int val=root.val;if(val==targetSum){cnt++;}//递归遍历左右子树//把目标和减去当前节点值后继续往下找,// 即“从当前节点出发的一条路径”的后续路径是否能补足剩余的值。cnt+=rootSum(root.left,targetSum-val);cnt+=rootSum(root.right,targetSum-val);// 即“从当前节点出发的一条路径”的后续路径是否能补足剩余的值。return cnt;}public static void main(String[] args){H437 test=new H437();TreeNode root=new TreeNode(10);root.left=new TreeNode(5);root.right=new TreeNode(-3);root.left.left=new TreeNode(3);root.left.right=new TreeNode(2);root.right.right=new TreeNode(11);root.left.left.left = new TreeNode(3);root.left.left.right = new TreeNode(-2);root.left.right.right = new TreeNode(1);
//        TreeNode root = new TreeNode(10);
//        root.left = new TreeNode(5);
//        root.right = new TreeNode(-3);
//        root.left.left = new TreeNode(3);
//        root.left.right = new TreeNode(2);
//        root.right.right = new TreeNode(11);
//        root.left.left.left = new TreeNode(3);
//        root.left.left.right = new TreeNode(-2);
//        root.left.right.right = new TreeNode(1);
//int targetSum = 8;int result = test.pathSum(root, targetSum);System.out.println("路径总和为 " + targetSum + " 的路径条数为:" + result);}
}

相关文章:

  • 24 数组基础与应用详解:定义(静态/VLA)、初始化、访问(有效/越界/内存调试)、遍历、大小端字节序
  • C++23:关键特性与最新进展深度解析
  • DAY9 热力图和箱线图的绘制
  • 翻转二叉树
  • 【基于STM32的新能源汽车智能循迹系统开发全解析】
  • React---day2
  • 软件同步机制-Peterson解决方案 简单讲解
  • day38 python Dataset和Dataloader
  • SSM整合:Spring+SpringMVC+MyBatis完美融合实战指南
  • 基于大模型的慢性胃炎全周期预测与诊疗方案研究报告
  • 【Quest开发】空间音频的使用
  • 异常:UnsupportedOperationException: null
  • 【运维_日常报错解决方案_docker系列】一、docker系统不起来
  • OpenCV CUDA模块图像处理------颜色空间处理之用于执行伽马校正(Gamma Correction)函数gammaCorrection()
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()
  • 传统数据表设计与Prompt驱动设计的范式对比:以NBA投篮数据表为例
  • 【请关注】VC++ MFC常见异常问题及处理方法
  • 【LeetCode 热题 100】打家劫舍 / 零钱兑换 / 单词拆分 / 乘积最大子数组 / 最长有效括号
  • react基础技术栈
  • [React]实现一个类zustand公共状态库
  • 网站建设开发定制/深圳广告公司排名
  • 网站建设 标准/企业产品网络推广
  • 专业商城网站设计/大连seo顾问
  • 网页制作模板怎么制作/泰安seo培训
  • 网站开发的硬件环境和软件怎么写/推文关键词生成器
  • 网上商城如何推广/seo研究院