Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
Subscribeto see which companies asked this question
Show Tags 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> pathSum(TreeNode root, int sum) { List
> result = new ArrayList
>(); if(root != null) dfs(root, sum, 0, new ArrayList
(), result); return result; } private static void dfs(TreeNode root, int sum, int s, ArrayList path, List > result) { if(root.left == null && root.right == null) { if(s + root.val == sum) { path.add(root.val); result.add((List
) 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); } }