题目
写在前面
注意到本题的要求是,找到所有满足从「根节点」到某个「叶子节点」经过的路径上的节点之和等于目标和的路径。核心思想是对树进行一次遍历,在遍历时记录从根节点到当前节点的路径和,以防止重复计算。
思路
深度优先搜索
我们可以采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。
代码
import java.util.ArrayList;
import java.util.List;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public class Solution {
List<List<Integer>> rst = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
dfs(root, sum);
return rst;
}
public void dfs(TreeNode root, int sum){
if(root == null){
return;
}
temp.add(root.val);
sum -= root.val;
if(root.left == null && root.right == null && sum == 0){
rst.add(new ArrayList<Integer>(temp));
}
dfs(root.left, sum);
dfs(root.right, sum);
temp.remove(temp.size() - 1);
}
}