[LeetCode][Java] Path Sum II
2015-07-21 10:48
627 查看
题目:
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 = 22,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
返回
[ [5,4,11,2], [5,8,4,5] ]
算法分析:
* 同题目《Path Sum》相似* 同样利用递归策略
* 不同之处在于本题需要在遍历的时候记录走寻的路径 dfs
* 但是需要注意的是,递归回溯上来的时候要进行清理工作
AC代码:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) { ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>(); helper(root,sum,new ArrayList<Integer>(),res); return res; } public void helper(TreeNode root,int sum,ArrayList<Integer> cur,ArrayList<ArrayList<Integer>> res) { if(root==null) return; //到达叶子节点且根结点的值等于sum if(root.left==null && root.right==null && root.val==sum) { cur.add(root.val); res.add(new ArrayList<Integer>(cur)); //清除操作 cur.remove(cur.size()-1); return; } //没有到达叶子节点,左子树不为空 if(root.left!=null) { cur.add(root.val); //对左子树进行递归调用 helper(root.left,sum-root.val,cur,res); //返回时,清除操作 cur.remove(cur.size()-1); } //没有到达叶子节点,右子树不为空 if(root.right!=null) { cur.add(root.val); //对右子树进行递归调用 helper(root.right,sum-root.val,cur,res); //返回时,清除操作 cur.remove(cur.size()-1); } } }
相关文章推荐
- java判断字符串中是否包含字母
- JAVA设计模式之单例模式
- java中==和equals
- Java小数四舍五入与保留位(二)
- 算法_java 搜索指定目录下指定类型的文…
- 语法_java File类的方法
- 10. JavaSE-子类实例化过程 & 构造方法间调用
- Spring 注入
- Java小数四舍五入与保留位(一)
- java 反射机制
- 解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
- java中keytool生成的jks证书转换为openssl格式证书
- Java-发送邮件(附件、图片)---(四)类-MimeMultipart、MimeBodyPart、FileDataSource、DataHandler、
- Java中Runnable和Thread的区别
- FineReport搭建物流报表平台的解决方案
- spring BeanFactoryPostProcessor PathMatchingResourcePatternResolver
- 二叉查找树 图文解析 和 Java的实现
- Spring的设计模式
- Java并发
- 2015暑假复习——java