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.
【思路】
采用回溯算法。回溯算法要求我们准备一个中间集 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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树