您的位置:首页 > Web前端

剑指offer:二叉树中和为某一值的路径

2018-03-01 21:29 232 查看
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
/**
*   思路:一开始的思路是利用二叉树的深度优先遍历,利用一个栈来保存路径,每次返回时,
*   就把这个节点在路径中去掉。
*   但是java中用栈实现起来太烦了,参考下别人的代码,利用集合类的clone()方法,即原型模式,
*   每个路径都新建一个ArrayList来保存路径,这样其实增加了复杂度,但是Java中利用栈来实现
*   我还没有实现,先这样了。
*/
public class Solution {
    public ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        if(root == null){
            return res;
        }
        ArrayList<Integer> list = new ArrayList<Integer>();
        int sum = root.val;
        dfs(list,root,target,sum);
        return res;
    }
     
    public void dfs(ArrayList<Integer> list,
                   TreeNode node, int target,int sum){
        if(node==null){return;}
        list.add(node.val);
        if(node.left==null && node.right==null && sum == target){
            res.add(list);
            return;
        }
        ArrayList<Integer> left = (ArrayList<Integer>)list.clone();
        ArrayList<Integer> right = (ArrayList<Integer>)list.clone();
        list = null;
        if(node.left!=null){
            dfs(left,node.left,target,sum+node.left.val);
        }
        if(node.right!=null){
            dfs(right,node.right,target,sum+node.right.val);
        }
         
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: