您的位置:首页 > 其它

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 
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: