您的位置:首页 > 其它

LeetCode刷题笔录Path Sum II

2014-08-02 00:24 381 查看
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]
]

和之前Path Sum差不多,也是DFS。要在递归的时候记录当前的路径。
/**
* Definition for binary tree
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root == null)
return result;
ArrayList<Integer> curr = new ArrayList<Integer>();
//curr.add(root.val);
recursive(root, sum, result, curr, 0);
return result;
}

public void recursive(TreeNode root, int sum, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> curr, int currSum){
if(root == null)
return;
currSum += root.val;
curr.add(root.val);
if(root.left == null && root.right == null && sum == currSum){
result.add(new ArrayList<Integer>(curr));
}
if(root.left != null){
recursive(root.left, sum, result, curr, currSum);
}
if(root.right != null){
recursive(root.right, sum, result, curr, currSum);
}
curr.remove(curr.size() - 1);
currSum -= root.val;
return;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: