34. 二叉树中和为某一值的路径

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

 

示例:
给定如下二叉树,以及目标和 sum = 22

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

返回:

[
   [5,4,11,2],
   [5,8,4,5]
]

 

提示:

  1. 节点总数 <= 10000
class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        List<List<Integer>> lists = new ArrayList<>();
        dfs(root,sum,new ArrayList<Integer>(),lists);
        return lists;
        
    }
    
    private void dfs(TreeNode node,int sum,List<Integer> list,List<List<Integer>> lists){
        if(node == null) return;
        list.add(node.val);
        sum -= node.val;
        if(sum == 0 && node.left == null && node.right == null){
            lists.add(new ArrayList(list));
            // 一起
            // list.remove(list.size() - 1);
            // return;
        }
        dfs(node.left,sum,list,lists);
        dfs(node.right,sum,list,lists);
        list.remove(list.size() - 1);
 
    }
}

 

posted @ 2020-04-04 00:06  海绵爱上星  阅读(132)  评论(0编辑  收藏  举报