categories: [Blog,Algorithm]


113. 路径总和 II

难度中等435
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。

示例 1:
113. 路径总和 II--🀄️ - 图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:
113. 路径总和 II--🀄️ - 图2
输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:
输入:root = [1,2], targetSum = 0
输出:[]

  1. List<List<Integer>> ret = new LinkedList<List<Integer>>();
  2. Deque<Integer> path = new LinkedList<Integer>();
  3. public List<List<Integer>> pathSum(TreeNode root, int sum) {
  4. dfs(root, sum);
  5. return ret;
  6. }
  7. public void dfs(TreeNode root, int sum) {
  8. if (root == null) {
  9. return;
  10. }
  11. path.offerLast(root.val);
  12. sum -= root.val;
  13. if (root.left == null && root.right == null && sum == 0) {
  14. ret.add(new LinkedList<Integer>(path));
  15. }
  16. dfs(root.left, sum);
  17. dfs(root.right, sum);
  18. path.pollLast();//不满足的路径弹出.满足的不会执行到这里(子节点为空时就返回return了)。
  19. }

解析

深度优先搜索
思路及算法
我们可以采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。