从零学算法113

113 .给你二叉树的根节点 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

输出:[]

  • 我的思路:不用想,看到树,看到路径,不 dfs 等什么。接下来就是入参,root 肯定是要的,不然我都不知道我遍历到哪个节点了,然后要计算路径伤的和,肯定也需要一个 int 变量。接下来就是递归的出口,首先如果遍历到节点都为 null 了,那肯定是要返回了,其次根据题意如果遍历到叶子结点,路径和是我们要的,那就把这一条路径添加到结果 list 中。递归内容就是不断更新 root 以及计算的路径和了
java 复制代码
  List<List<Integer>> ans = new ArrayList<>();
  List<Integer> list = new ArrayList<>();
  public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
      dfs(root,targetSum);
      return ans;
  }
  void dfs(TreeNode root, int sum){
      if(root==null)return;
      list.add(root.val);
      sum-=root.val;
      if(root.left==null && root.right==null && sum==0)
      	// 防止 ans 中的路径随递归继续改变
          ans.add(new ArrayList(list));
      dfs(root.left,sum);
      dfs(root.right,sum);
      // 路径恢复
      list.remove(list.size()-1);
  }
  • 由于路径不一定正确,所以肯定是需要路径恢复的。但是还有一点很关键的,就是 sum 必须在 ans 添加路径前先计算出来
相关推荐
shilei_c1 分钟前
qt qDebug无输出问题解决
开发语言·c++·算法
秋深枫叶红5 分钟前
嵌入式C语言阶段复习——函数
c语言·数据结构·算法
We་ct9 分钟前
LeetCode 49. 字母异位词分组:经典哈希解法解析+易错点规避
前端·算法·leetcode·typescript·哈希算法
梵刹古音10 分钟前
【C语言】 数组函数与排序算法
c语言·算法·排序算法
胖咕噜的稞达鸭22 分钟前
算法日记:穷举vs暴搜vs深搜vs回溯vs剪枝--全排列
算法·深度优先·剪枝
Figo_Cheung27 分钟前
Figo关于热、声、光的物理本质辨析——从根本上解释了光速的恒定性与声速的介质依赖性,揭示了光热转换的微观场论机制
算法·机器学习
格林威29 分钟前
Baumer相机轴承滚珠缺失检测:用于精密装配验证的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·算法·计算机视觉·视觉检测·工业相机·堡盟相机
一起养小猫29 分钟前
Flutter for OpenHarmony 实战:2048游戏算法与优化深度解析
算法·flutter·游戏
执着25929 分钟前
力扣hot100 - 226、翻转二叉树
数据结构·算法·leetcode
-Try hard-30 分钟前
排序和查找算法:插入排序、希尔排序、快速排序以及二分查找
数据结构·算法·排序算法