给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[ [5,4,11,2], [5,8,4,5] ]
思路 + 代码
class Solution {
List<List<Integer>> res = new ArrayList();
LinkedList<Integer> path = new LinkedList();
int curSum = 0;
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if (root == null) return res;
dfs(root, sum);
return res;
}
public void dfs(TreeNode node, int target){
if (node == null) return;
path.add(node.val);
curSum += node.val;
if (node.left == null && node.right == null && curSum == target)
res.add(new ArrayList(path));
dfs(node.left, target);
dfs(node.right, target);
curSum -= node.val;
path.removeLast();
// path.remove(path.size() - 1);
}
}