解法一:深度优先搜索

深搜,没啥特别的。

  1. import java.util.LinkedList;
  2. import java.util.List;
  3. /**
  4. * Definition for a binary tree node.
  5. * public class TreeNode {
  6. * int val;
  7. * TreeNode left;
  8. * TreeNode right;
  9. * TreeNode(int x) { val = x; }
  10. * }
  11. */
  12. class Solution {
  13. List<List<Integer>> ans;
  14. public List<List<Integer>> pathSum(TreeNode root, int sum) {
  15. ans = new LinkedList<>();
  16. dfs(root, sum, new LinkedList<>());
  17. return ans;
  18. }
  19. private void dfs(TreeNode root, final int sum, List<Integer> nums) {
  20. if (root == null) {
  21. return;
  22. }
  23. nums.add(root.val);
  24. if ((root.left == null) && (root.right == null)) {
  25. int temp = 0;
  26. for (int i : nums) {
  27. temp += i;
  28. }
  29. if (temp == sum) {
  30. ans.add(new LinkedList<>(nums));
  31. }
  32. nums.remove(nums.size() - 1);
  33. return;
  34. }
  35. dfs(root.left, sum, nums);
  36. dfs(root.right, sum, nums);
  37. nums.remove(nums.size() - 1);
  38. }
  39. }