题目描述
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 返回: [ [5,4,11,2], [5,8,4,5] ]
思路
1.求有效路径的思路与112.路径总和相同。
2.我们需要将路径存储起来,存储路径时我们需要注意实际操作的是list的引用:
- 向下递归求取路径时,应该根据cur的值重新拷贝一份新的list。
- 将cur添加到结果集中时,也需要拷贝一份新的list。
Java代码实现
public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> res = new ArrayList<>(); List<Integer> cur = new ArrayList<>(); findPathSum(root,sum,cur,res); return res; } private void findPathSum(TreeNode root,int sum,List<Integer> cur,List<List<Integer>> res){ if(root == null) return; cur.add(root.val); int val = sum - root.val; //路径符合要求 if(val == 0 && root.left == null && root.right == null){ //将路径压入结果集 res.add(new ArrayList<>(cur)); return; } //递归求解左子树所有路径情况 findPathSum(root.left,val,new ArrayList<>(cur),res); //递归求解右子树所有路径情况 findPathSum(root.right,val,new ArrayList<>(cur),res); }