思路:
深度优先+回溯
dfs(root, sum)函数:
终止条件:结点root为空,直接返回
递推工作:
1.加入当前结点的值root.val
,并且更新sum-=root.val
2.如果当前结点为叶子结点且路径和==sum,则将此路径path加入res
class Solution {
List<List<Integer>> res = new LinkedList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
dfs(root, sum);
return res;
}
void dfs(TreeNode root, int sum){
if (root == null) return;
path.add(root.val);
sum -= root.val;
if (sum == 0 && root.left == null && root.right == null){
res.add(new LinkedList(path));
}
//如果没到达叶子节点,就继续从他的左右两个子节点往下找
dfs(root.left, sum);
dfs(root.right, sum);
//我们要理解递归的本质,当递归往下传递的时候他最后还是会往回走,
//我们把这个值使用完之后还要把它给移除,这就是回溯
path.removeLast();
}
}