一定要把二叉树的题都做一遍 T^T
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
(叶子节点 是指没有子节点的节点。)
例一:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]例二:
输入:root = [1,2,3], targetSum = 5 输出:[]
要找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。那么我们需要遍历二叉树,才能找出所有符合条件的结果,此时我第一时间想到的是:
回溯法 ,如果在遍历二叉树的时候,如果每次一个路径。从根节点到叶子节点时,路径总和不等于目标和的,那么我们就减去最后一个元素,再进行递归
递归停止的条件是: 当遍历的节点为空的时候
我们定义一个List用来保存所有的结果和,一个List用来保存其中一个路径。
class Solution {
List<List<Integer>> ans = new ArrayList<>(); // 保存所有结果的值
LinkedList<Integer> list = new LinkedList<>(); // 保存正在计算的一条路径
public List<List<Integer>> pathSum(TreeNode root, int target) {
dfs(root, target);
return ans;
}
public void dfs(TreeNode root, int target){
if(root == null){
return;
}
target -= root.val;
list.add(root.val);
// 到达叶子节点,且符合要求
if(target == 0 && root.left == null && root.right == null){
ans.add(new ArrayList<>(list));
}
else{
dfs(root.left, target);
dfs(root.right, target);
}
list.removeLast();
}
}