Skip to content

Instantly share code, notes, and snippets.

@thanlau
Created April 25, 2017 19:54
Show Gist options
  • Save thanlau/0331f47ce905a313fd73f4a88cef215b to your computer and use it in GitHub Desktop.
Save thanlau/0331f47ce905a313fd73f4a88cef215b to your computer and use it in GitHub Desktop.
public class Solution {
/**
* @param root the root of binary tree
* @param target an integer
* @return all valid paths
*/
public List<List<Integer>> binaryTreePathSum2(TreeNode root, int target) {
/**思路
* 起点不一定在root上面,那么可以从叶子节点逐步向上走
* for循环找到等于target的路径输出*/
//用result存最后结果,用buffer记录路径
List<List<Integer>> results = new ArrayList<List<Integer>>();
ArrayList<Integer> buffer = new ArrayList<Integer>();
if (root == null)
return results;
//这道题用的traverse,起点,终点,暂存,当前层数,结果
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);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment