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相等,如果是则保存这个路径。
-
-
-
-
-
-
-
-
-
- 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.youkuaiyun.com/xiaosongluo/article/details/52797156