http://www.lintcode.com/en/problem/binary-tree-path-sum-ii/
Your are given a binary tree in which each node contains a value. Design an algorithm to get all paths which sum to a given value. The path does not need to start or end at the root or a leaf, but it must go in a straight line down.
Example Given a binary tree:
1
/ \
2 3
/ /
4 2
for target = 6, return
[
[2, 4],
[1, 3, 2]
]
解题:这题比起path sum ii不是求数量,而是要给出path的集合。
public class Solution {
public List<List<Integer>> binaryTreePathSum2(TreeNode root, int target) {
// Write your code here
List<List<Integer>> results = new ArrayList<List<Integer>>();
ArrayList<Integer> buffer = new ArrayList<Integer>();
if (root == null)
return results;
findSum(root, target, buffer, 0, results);
return results;
}
public void findSum(TreeNode head, int sum, ArrayList<Integer> buffer, int level, List<List<Integer>> results) {
if (head == null) return;
int tmp = sum;
buffer.add(head.val);
for (int i = level;i >= 0; i--) {
tmp -= buffer.get(i);
if (tmp == 0) {
List<Integer> temp = new ArrayList<Integer>();
for (int j = i; j <= level; ++j)
temp.add(buffer.get(j));
results.add(temp);
}
}
findSum(head.left, sum, buffer, level + 1, results);
findSum(head.right, sum, buffer, level + 1, results);
buffer.remove(buffer.size() - 1);
}
}