给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
思路: 回溯的思路,走递归树,满足就加
不过这里有个点需要注意的是,注意递归的return,因为回溯后回到原先的调用递归层次,需要去tmp.remove删除原先的数字,如果在某一层提前return 可能会导致原先的数字在tmp没有被删除,导致数据出错。这里需要谨慎用return.
/**
* Definition for a binary tree node.
*
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> list = new ArrayList<>();
findPathSum(list,new ArrayList<Integer>(),root,sum);
return list;
}
public void findPathSum(List<List<Integer>> list,List<Integer> tmp,TreeNode root,int sum) {
if (root == null)return;
tmp.add(root.val);
if (root.left == null && root.right == null) {
if (sum -root.val== 0) {
list.add(new ArrayList<Integer>(tmp));
}
}
findPathSum(list,tmp,root.left,sum-root.val);
findPathSum(list,tmp,root.right,sum-root.val);
tmp.remove(tmp.size()-1);
}
}