leetcode--Path Sum II
2017-08-08 11:43
288 查看
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
return
题意:给定二叉树和一个sum,找出所有和为sum的路径
分类:二叉树
解法1:后序遍历非递归算法。每次访问一个节点,判断当前和是否和sum相等,如果是则保存这个路径。
[java] view
plain copy
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> pathSum(TreeNode root, int target) {
ArrayList<TreeNode> stack = new ArrayList<TreeNode>();
List<List<Integer>> result = new ArrayList<List<Integer>>();
int top = -1;
int sum = 0;
TreeNode p = root;
do{
while(p!=null){
top++;
sum += p.val;
stack.add(top,p);
p = p.left;
}
boolean flag = true;
TreeNode q = null;
while(top!=-1 && flag){
p = stack.get(top);
if(p.right==q){
if(p.left==null&&p.right==null && sum==target){
ArrayList<Integer> t = new ArrayList<Integer>();
for(TreeNode tNode : stack){
t.add(tNode.val);
}
result.add(t);
}
sum -= p.val;
stack.remove(top);
top--;
q = p;
}else{
p = p.right;
flag = false;
}
}
}while(top!=-1);
return result;
}
}
原文链接http://blog.csdn.net/xiaosongluo/article/details/52797156
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,找出所有和为sum的路径
分类:二叉树
解法1:后序遍历非递归算法。每次访问一个节点,判断当前和是否和sum相等,如果是则保存这个路径。
[java] view
plain copy
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> pathSum(TreeNode root, int target) {
ArrayList<TreeNode> stack = new ArrayList<TreeNode>();
List<List<Integer>> result = new ArrayList<List<Integer>>();
int top = -1;
int sum = 0;
TreeNode p = root;
do{
while(p!=null){
top++;
sum += p.val;
stack.add(top,p);
p = p.left;
}
boolean flag = true;
TreeNode q = null;
while(top!=-1 && flag){
p = stack.get(top);
if(p.right==q){
if(p.left==null&&p.right==null && sum==target){
ArrayList<Integer> t = new ArrayList<Integer>();
for(TreeNode tNode : stack){
t.add(tNode.val);
}
result.add(t);
}
sum -= p.val;
stack.remove(top);
top--;
q = p;
}else{
p = p.right;
flag = false;
}
}
}while(top!=-1);
return result;
}
}
原文链接http://blog.csdn.net/xiaosongluo/article/details/52797156
相关文章推荐
- Leetcode 113. Path Sum II
- 【LeetCode】Path Sum II
- 【LeetCode with Python】 Path Sum II
- [leetcode] Path Sum II
- Leetcode Path sum II
- 【leetCode】Path Sum II python实现
- [LeetCode]113 Path Sum II
- [LeetCode]113. Path Sum II
- Leetcode: Unique Path I & II, Minimum Path Sum, Triangle
- LeetCode[Tree]: Path Sum II
- [Leetcode] 113. Path Sum II 解题报告
- [LeetCode] Path Sum II
- leetcode 113. Path Sum II
- LeetCode Path Sum II
- LeetCode详解 之 Path Sum I and II(Java)
- LeetCode: Path Sum II
- LeetCode Path Sum II
- LeetCode——Path Sum II
- LeetCode 113. Path Sum II
- [leetcode刷题系列]Path Sum II