树的路径总和 II
题目描述:
树的路径总和 I
113.路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
问题分析:
比着之前的路径总和 I,多加了了一个记录 root.val 的这样一个过程,而这个过程就和 组合总和 里的问题解法很是相似,所以
可以借鉴一下思想。都是这种 往大列表中添加小列表的过程。
代码展示(已验证):
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<List<Integer>> listAll = new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
pathsum(root,sum,new ArrayList<Integer>());
return listAll;
}
public void pathsum(TreeNode root,int sum,List<Integer> list){
if(root == null)
return;
sum -= root.val;
list.add(root.val); // 将节点加入队列
if(root.left == null && root.right == null && sum == 0)
{
listAll.add(new ArrayList<>(list));
}
pathsum(root.left,sum,list);
pathsum(root.right,sum,list);
list.remove(list.size()-1); // 移除临时队列中使用的 root
}
}
泡泡:
树的路径总和 I
树的路径总和 II
组合总和 I
组合总和 II
组合总和 III
组合总和 IV
这几道题都算是对列表的应用吧,虽然限制条件不同,但是最后输出的结果所产生的过程是相同的。