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 tree15 * @param target: An integer16 * @return: all valid paths17 */18 private int sum = 0;19 private List
> result = new ArrayList
>();20 private List path = new ArrayList ();21 public List
> binaryTreePathSum(TreeNode root, int target) {22 // write your code here23 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 temp = new ArrayList (path); //拷贝path33 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 }
代码有点乱,有待改进。