113. 路径总和 II
题解
使用两个List来记录,一个用于记录当前路径temp,一个用于记录符合情况的路径res,当满足要求把temp加入List,需要注意的是不管是否满足题意,在最后都要把temp的路径清除,否则后面把temp加入List时会有多余的数据。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<List<Integer>> res = new ArrayList();//全局变量来获取所有的结果路径
public List<List<Integer>> pathSum(TreeNode root, int sum) {
LinkedList<Integer> temp = new LinkedList<>();// 定义一个有序list来存储路径
helper(root, sum, temp);
return res;
}
public void helper(TreeNode node, int sum, LinkedList<Integer> temp) {
if (node == null) {
return;
}
temp.add(node.val);// 记录路径
if (node.left == null && node.right == null && sum == node.val) {
res.add(new ArrayList(temp));
}
helper(node.left, sum - node.val, temp);
helper(node.right, sum - node.val, temp);
temp.removeLast();// 重点,遍历完后,需要把当前节点remove出去,因为用的是同一个list对象来存所有的路径
}
}