1 /** 2 * Definition of TreeNode: 3 * public class TreeNode { 4 * public int val; 5 * public TreeNode left, right; 6 * public TreeNode(int val) { 7 * this.val = val; 8 * this.left = this.right = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 /* 14 * @param root: the root of binary tree 15 * @param target: An integer 16 * @return: all valid paths 17 */ 18 private int sum = 0; 19 private List<List<Integer>> result = new ArrayList<List<Integer>>(); 20 private List<Integer> path = new ArrayList<Integer>(); 21 public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) { 22 // write your code here 23 calculate(root, target); 24 return result; 25 } 26 27 public void calculate(TreeNode node, int target) { 28 if(node != null) { 29 sum += node.val; 30 path.add(node.val); 31 if (sum == target && node.left == null && node.right == null) { 32 List<Integer> temp = new ArrayList<Integer>(path); //拷贝path 33 result.add(temp); 34 sum -= node.val; //回溯到父节点状态 35 path.remove(path.size()-1); //回溯到父节点状态 36 return; 37 } 38 if (node.left == null && node.right == null) { 39 sum -= node.val; //回溯到父节点状态 40 path.remove(path.size()-1); //回溯到父节点状态 41 return; 42 } 43 calculate(node.left, target); 44 calculate(node.right, target); 45 sum -= node.val; //回溯到父节点状态 46 path.remove(path.size()-1); //回溯到父节点状态 47 } 48 } 49 }
代码有点乱,有待改进。