剑指offer:二叉树中和为某一值的路径
2018-03-01 21:29
232 查看
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
/**
* 思路:一开始的思路是利用二叉树的深度优先遍历,利用一个栈来保存路径,每次返回时,
* 就把这个节点在路径中去掉。
* 但是java中用栈实现起来太烦了,参考下别人的代码,利用集合类的clone()方法,即原型模式,
* 每个路径都新建一个ArrayList来保存路径,这样其实增加了复杂度,但是Java中利用栈来实现
* 我还没有实现,先这样了。
*/
public class Solution {
public ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null){
return res;
}
ArrayList<Integer> list = new ArrayList<Integer>();
int sum = root.val;
dfs(list,root,target,sum);
return res;
}
public void dfs(ArrayList<Integer> list,
TreeNode node, int target,int sum){
if(node==null){return;}
list.add(node.val);
if(node.left==null && node.right==null && sum == target){
res.add(list);
return;
}
ArrayList<Integer> left = (ArrayList<Integer>)list.clone();
ArrayList<Integer> right = (ArrayList<Integer>)list.clone();
list = null;
if(node.left!=null){
dfs(left,node.left,target,sum+node.left.val);
}
if(node.right!=null){
dfs(right,node.right,target,sum+node.right.val);
}
}
}
/**
* 思路:一开始的思路是利用二叉树的深度优先遍历,利用一个栈来保存路径,每次返回时,
* 就把这个节点在路径中去掉。
* 但是java中用栈实现起来太烦了,参考下别人的代码,利用集合类的clone()方法,即原型模式,
* 每个路径都新建一个ArrayList来保存路径,这样其实增加了复杂度,但是Java中利用栈来实现
* 我还没有实现,先这样了。
*/
public class Solution {
public ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null){
return res;
}
ArrayList<Integer> list = new ArrayList<Integer>();
int sum = root.val;
dfs(list,root,target,sum);
return res;
}
public void dfs(ArrayList<Integer> list,
TreeNode node, int target,int sum){
if(node==null){return;}
list.add(node.val);
if(node.left==null && node.right==null && sum == target){
res.add(list);
return;
}
ArrayList<Integer> left = (ArrayList<Integer>)list.clone();
ArrayList<Integer> right = (ArrayList<Integer>)list.clone();
list = null;
if(node.left!=null){
dfs(left,node.left,target,sum+node.left.val);
}
if(node.right!=null){
dfs(right,node.right,target,sum+node.right.val);
}
}
}
相关文章推荐
- 剑指Offer——二叉树中和为某一值的路径
- 【剑指offer系列】 二叉树中和为某一值的路径___25
- 剑指offer——面试题25:二叉树中和为某一值的路径
- 剑指offer --- 二叉树中和为某一数的路径
- 剑指offer:输出二叉树和为某一值的所有路径
- [剑指offer学习心得]之:二叉树中和为某一值的路径
- 《剑指offer》-二叉树中和为某一值的路径
- 剑指offer-二叉树中和为某一值的路径
- 剑指Offer系列-面试题25:二叉树中和为某一值的路径
- 《剑指offer》二叉树中和为某一值的路径
- 剑指Offer 面试题34:二叉树中和为某一值的路径 Java代码实现
- 剑指offer-25 二叉树中和为某一值的路径
- 剑指Offer(Java版):二叉树中和为某一值的路径
- 《剑指Offer》面试题25:二叉树中和为某一值的路径
- (剑指Offer)二叉树中和为某一值的路径
- 剑指offer题解C++【24】二叉树中和为某一值的路径
- 剑指Offer:二叉树中和为某一值的路径
- 剑指offer之面试题25:二叉树中和为某一值的路径
- 剑指Offer系列---(27)二叉树中和为某一值的路径
- python剑指offer系列二叉树中和为某一值的路径