您的位置:首页 > 编程语言 > Java开发

leetcode 113. Path Sum II-路径和|回溯算法

2016-06-11 15:35 531 查看
原题链接:113. Path Sum II
【思路】

采用回溯算法。回溯算法要求我们准备一个中间集 temp,一个结果集 res。这里和以往题目递归中包含循环,循环中嵌套递归的不同。本题没有包含循环。 递归遍历过程中,往中间集当中添加节点值,遍历结束的条件为 root 的左右节点均为空,即到叶子节点为止,如果满足条件——路径上各节点值和等于 sum,那么就可以将结果集添加到中间集当中。回溯是在递归完左右子树后,再将该节点移除

public class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(root == null) return res;
List<Integer> temp = new ArrayList<Integer>();
dfs(root, res, temp, sum);
return res;
}
private void dfs(TreeNode root, List<List<Integer>> res, List<Integer> temp, int sum) {
temp.add(root.val);
sum -= root.val;
if(root.left == null && root.right == null) //递归结束条件
if(sum == 0) res.add(new ArrayList<>(temp)); //满足路径和等于 sum,添加到结果集中去
if(root.left != null) dfs(root.left, res, temp, sum);
if(root.right != null) dfs(root.right, res, temp, sum);
temp.remove(temp.size()-1); //回溯
}
}114 / 114 test
cases passed. Runtime: 3
ms  Your runtime beats 38.17% of javasubmissions.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java leetcode