问题描述
地址:https://leetcode.com/problems/path-sum-ii/#/description
描述:
Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum.
For example:
Given the below binary tree and sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
return
[
[5,4,11,2],
[5,8,4,5]
]
翻译:
给出一个二叉树和一个sum值,找出所有从根节点到叶子节点的路径,这些路径需要满足:路径上所有节点的和=sum
问题解析
设置两个list innerList 和 outerList
(1)从根节点向下遍历,一边遍历一边将节点值加和,并向innerList 中追加
(2)当遇到叶子节点的时候判断加和是否与sum相等
- 如果相等,则将innerList 添加到outerList中,同时去掉innerList中最后一个元素;
否则继续向innerList中追加
解析代码
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> resultList = new ArrayList<List<Integer>>();
List<Integer> innerList = new ArrayList<Integer>();
pathSum(resultList, root, 0, innerList, sum);
return resultList;
}
private void pathSum(List<List<Integer>> outerList, TreeNode root, int count, List<Integer> innerList, int sum) {
if(root == null){
return ;
}
count += root.val;
if(count == sum && root.left == null && root.right == null){
innerList.add(root.val);
outerList.add(new ArrayList<Integer>(innerList));
innerList.remove(innerList.size()-1);
return;
}
innerList.add(root.val);
pathSum(outerList, root.left, count, innerList, sum);
pathSum(outerList, root.right, count, innerList, sum);
innerList.remove(innerList.size()-1);
}