题目链接:https://leetcode.com/problems/path-sum-ii/
Total Accepted: 72944
Total Submissions: 262389
Difficulty: Medium
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] ]
Subscribe to see which companies asked this question
Show Similar Problems
Have you met this question in a real interview?
Yes
No
给定一个目标数,找到一棵树所有的根到叶子和为这个数的路径。这道题比较简单,普通的DFS深搜就可以解决。用一个list存储路径上的数。注意递归结束后把list的最后加入的数移除。
我的AC代码
public class PathSumII {
/**
* @param args
*/
public static void main(String[] args) {
TreeNode n1 = new TreeNode(1);
TreeNode n2 = new TreeNode(-2);
TreeNode n3 = new TreeNode(-3);
TreeNode n4 = new TreeNode(1);
TreeNode n5 = new TreeNode(3);
TreeNode n6 = new TreeNode(-2);
TreeNode n7 = new TreeNode(-1);
n1.left = n2;
n1.right = n3;
n2.left = n4;
n2.right = n5;
n3.left = n6;
n4.left = n7;
System.out.print(pathSum(n1, 2));
}
public static List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(root != null) dfs(root, sum, 0, new ArrayList<Integer>(), result);
return result;
}
private static void dfs(TreeNode root, int sum, int s, ArrayList<Integer> path, List<List<Integer>> result) {
if(root.left == null && root.right == null) {
if(s + root.val == sum) {
path.add(root.val);
result.add((List<Integer>) path.clone());
path.remove(path.size() - 1);
}
return;
}
path.add(root.val);
if(root.left != null) dfs(root.left, sum, s + root.val, path, result);
if(root.right != null) dfs(root.right, sum, s + root.val, path, result);
path.remove(path.size() - 1);
}
}