113. Path Sum II

来源:互联网 发布:重生之一叶而知秋书包 编辑:程序博客网 时间:2024/06/02 05:55

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]]
这道题相当于I和III的组合版。递归向下传递的参数是sum - root.val。代码如下:

/** * 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 sum) {        List<List<Integer>> res = new ArrayList<List<Integer>>();        helper(res, new ArrayList<Integer>(), root, sum);        return res;    }        private void helper(List<List<Integer>> res, List<Integer> list, TreeNode root, int sum) {        if (root == null) {            return;        }        if (root.left == null && root.right == null && sum - root.val == 0) {            list.add(root.val);            res.add(new ArrayList<Integer>(list));            list.remove(list.size() - 1);            return;        }        list.add(root.val);        helper(res, list, root.left, sum - root.val);        helper(res, list, root.right, sum - root.val);        list.remove(list.size() - 1);    }}

原创粉丝点击