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,找出所有和为sum的路径
分类:二叉树
解法1:后序遍历非递归算法。每次访问一个节点,判断当前和是否和sum相等,如果是则保存这个路径。
/**
* 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;
}
}