PathSum2 给出所有的树根节点到叶子节点之和等于给定值的所有路径
2016-12-20 13:31
323 查看
package leetcode151withexplain;
import java.util.ArrayList;
/**
* 本题是希望给出所有的树根节点到叶子节点之和等于给定值的所有路径
*
* 本题思路:通过优先遍历的方式获取各个路径,然后当满足边界条件的时候,加入到总的结果中。
*
* 注意点:递归调用的时候,传递的是一个复制,而不是原本的传入,因为应用会有所改变。
*
*/
public class PathSumII039 {
//树节点 数据结构
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
//此题的解题思路是传统的一种套路 可以获取所有的路径
ArrayList<ArrayList<Integer>> answers = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> likeStack = new ArrayList<Integer>();
answers = getResults(answers, likeStack, root, sum);
return answers;
}
public ArrayList<ArrayList<Integer>> getResults(ArrayList<ArrayList<Integer>> answers,ArrayList<Integer> likeStack,TreeNode root,int sum){
if(root == null){
return answers;
}
likeStack.add(root.val);
//current node satisfies the condition
if(root.left == null && root.right == null && root.val == sum){
answers.add(likeStack);
}
//jude left
if(root.left != null){
//完全复制了一份 然后传递到下一轮调用
ArrayList<Integer> newLikeStack = new ArrayList<Integer>();
for(int i = 0; i < likeStack.size(); i++){
newLikeStack.add(likeStack.get(i));
}
getResults(answers,newLikeStack,root.left,sum-root.val);
}
if(root.right != null){
ArrayList<Integer> newLikeStack = new ArrayList<Integer>();
for(int i = 0; i < likeStack.size(); i++){
newLikeStack.add(likeStack.get(i));
}
getResults(answers,newLikeStack,root.right,sum-root.val);
}
return answers;
}
}
import java.util.ArrayList;
/**
* 本题是希望给出所有的树根节点到叶子节点之和等于给定值的所有路径
*
* 本题思路:通过优先遍历的方式获取各个路径,然后当满足边界条件的时候,加入到总的结果中。
*
* 注意点:递归调用的时候,传递的是一个复制,而不是原本的传入,因为应用会有所改变。
*
*/
public class PathSumII039 {
//树节点 数据结构
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
//此题的解题思路是传统的一种套路 可以获取所有的路径
ArrayList<ArrayList<Integer>> answers = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> likeStack = new ArrayList<Integer>();
answers = getResults(answers, likeStack, root, sum);
return answers;
}
public ArrayList<ArrayList<Integer>> getResults(ArrayList<ArrayList<Integer>> answers,ArrayList<Integer> likeStack,TreeNode root,int sum){
if(root == null){
return answers;
}
likeStack.add(root.val);
//current node satisfies the condition
if(root.left == null && root.right == null && root.val == sum){
answers.add(likeStack);
}
//jude left
if(root.left != null){
//完全复制了一份 然后传递到下一轮调用
ArrayList<Integer> newLikeStack = new ArrayList<Integer>();
for(int i = 0; i < likeStack.size(); i++){
newLikeStack.add(likeStack.get(i));
}
getResults(answers,newLikeStack,root.left,sum-root.val);
}
if(root.right != null){
ArrayList<Integer> newLikeStack = new ArrayList<Integer>();
for(int i = 0; i < likeStack.size(); i++){
newLikeStack.add(likeStack.get(i));
}
getResults(answers,newLikeStack,root.right,sum-root.val);
}
return answers;
}
}
相关文章推荐
- 节点数值总和等于某个给定值的所有路径
- 保存一棵树根到叶子之和为给定值的所有路径的DFS解法
- 给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的所有节点的节点值之和等于规定值的路径
- 查看一颗二叉树从根到叶子路径的节点和是否等于某个给定的数
- 二叉树中根到叶子路径中节点和等于给定值的路径
- 二叉树中根到叶子路径中节点和等于给定值的路径
- 找出所有从根节点到叶子节点路径和等于n的路径并输出
- 找出所有从根节点到叶子节点路径和等于n的路径并输出
- 保存一棵树根到叶子之和为给定值的所有路径的BFS解法
- 保存一棵树根到叶子之和为给定值的所有路径的BFS解法
- Sum Root to Leaf Numbers 求所有二叉树根到叶子节点路径之和 @LeetCode
- 二叉树中根到叶子路径中节点和等于给定值的路径
- 打印二叉树节点数值总和等于某个给定节点的所有路径
- 删除链表中等于给定值val的所有节点
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 求tree中节点之间路径总和等于给定数值的算法
- Tree-----找出和等于给定数字的所有路径(113. Path Sum II)
- 打印二叉树从根节点到叶子节点的所有路径
- 9.2链表(四)——以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的节点之前
- 7-4 输出一棵给定二叉树的所有叶子节点