从零学算法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 添加路径前先计算出来
相关推荐
AndrewHZ2 小时前
【图像处理基石】什么是油画感?
图像处理·人工智能·算法·图像压缩·视频处理·超分辨率·去噪算法
.格子衫.2 小时前
015枚举之滑动窗口——算法备赛
数据结构·算法
J先生x3 小时前
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
图像处理·人工智能·学习·算法·计算机视觉
爱coding的橙子5 小时前
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
算法·leetcode
?abc!10 小时前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue10 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
jiunian_cn11 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
工藤新一¹12 小时前
蓝桥杯算法题 -蛇形矩阵(方向向量)
c++·算法·矩阵·蓝桥杯·方向向量
Levin__NLP_CV_AIGC12 小时前
解决pip安装PyPI默认源速度慢
算法·pip
Helibo4413 小时前
GESPC++六级复习
java·数据结构·算法