从零学算法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 添加路径前先计算出来
相关推荐
residual_fan4 分钟前
经验模态重构:直向工业时间序列数据的数据扩增方法
人工智能·算法·重构·数据挖掘·数据分析
aramae25 分钟前
模拟实现strcpy(字符串拷贝)(C语言)
java·c语言·开发语言·算法
Benny_Tang29 分钟前
「雅礼集训 2018 Day7」A 题解
数据结构·c++·算法
Doubbbbbbble云39 分钟前
跳表结构在高并发系统中的应用与优势分析4
算法
TAN-90°-41 分钟前
Deep Learning for Computer Vision——Large Scale Distributed Training
人工智能·深度学习·神经网络·算法·机器学习·计算机视觉·语言模型
Lyyaoo.1 小时前
【回溯】【中等】全排列
java·数据结构·算法
写后端的胖头鱼1 小时前
一文讲懂JVM与调优
jvm·后端·算法·架构·jvm调优
土司大王1 小时前
LeetCode 79 单词搜索:Java 回溯模板、网格 DFS 与剪枝优化
java·算法·leetcode·深度优先
ECT-OS-JiuHuaShan1 小时前
哲学是迭代学,数学是拓扑学
开发语言·人工智能·学习·算法·机器学习·php·拓扑学
All for pursuit.1 小时前
【数组-5】560.和为K的子数组
数据结构·c++·算法·leetcode