0113. Path Sum II - kumaeki/LeetCode GitHub Wiki
Given the root of a binary tree and an integer targetSum, return all root-to-leaf paths where each path's sum equals targetSum.
A leaf is a node with no children.
Example 1:
Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Output: [[5,4,11,2],[5,8,4,5]]
Example 2:
Input: root = [1,2,3], targetSum = 5
Output: []
Example 3:
Input: root = [1,2], targetSum = 0
Output: []
Constraints:
- The number of nodes in the tree is in the range [0, 5000].
- -1000 <= Node.val <= 1000
- -1000 <= targetSum <= 1000
在每个节点,对应的新增一个list, 来保存可能的结果.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> result = new ArrayList<>();
helper(result, new ArrayList<Integer>(), root, 0, targetSum);
return result;
}
private void helper(List<List<Integer>> result, List<Integer> list, TreeNode node, int sum, int target){
if(node == null)
return;
sum += node.val;
if(node.left == null && node.right == null)
if(sum == target){
List<Integer> temp = new ArrayList<Integer>(list);
temp.add(node.val);
result.add(temp);
}else
return;
if(node.left != null){
List<Integer> temp = new ArrayList<Integer>(list);
temp.add(node.val);
helper(result, temp, node.left, sum, target);
}
if(node.right != null){
List<Integer> temp = new ArrayList<Integer>(list);
temp.add(node.val);
helper(result, temp, node.right, sum, target);
}
}
}
只有在符合条件的结果出现时才新建list, 其他时候只保存一个list, 在结束当前node的计算后, 从list的最后减去当前node的val.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
helper(res, new ArrayList<Integer>(), root, sum);
return res;
}
private void helper(List<List<Integer>> res, List<Integer> list, TreeNode node, int k){
if(node == null)
return;
int val = node.val;
k -= val;
list.add(node.val);
if(node.left == null && node.right == null && k == 0){
res.add(new ArrayList<Integer>(list));
}else{
helper(res, list, node.left, k);
helper(res, list, node.right, k);
}
list.remove(list.size()-1);
}
}