LeetCode 113. Path Sum II DFS求解

来源:互联网 发布:哪个软件听歌好 编辑:程序博客网 时间:2024/05/22 11:36

    题目链接:https://leetcode.com/problems/path-sum-ii/

113. Path Sum II

My Submissions
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 Tags
Show Similar Problems
Have you met this question in a real interview? 
Yes
 
No

Discuss


    给定一个目标数,找到一棵树所有的根到叶子和为这个数的路径。这道题比较简单,普通的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);}}


0 0
原创粉丝点击