Created
April 25, 2017 19:54
-
-
Save thanlau/0331f47ce905a313fd73f4a88cef215b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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