NO.113 路径总和II 中等
思路一:深搜回溯 NO.112路径总和的姊妹题,区别在于本题要求拿到路径集合,这样本题就更像NO.39组合总和、NO.40组合总和II了。思路也差不多:回溯。
每次减去节点值,并将节点加入路径集合。
需要注意的是:路径集合放入结果集之后,要remove当前节点之后再返回。不然会出现路径带有分支的情况,例如下图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| List<List<Integer>> res = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) { dfs(root, sum, new LinkedList<Integer>()); return res; }
private void dfs(TreeNode root, int sum, LinkedList<Integer> track) { if (root == null) return; sum -= root.val; track.add(root.val); if (root.left == null && root.right == null && sum == 0) { res.add(new LinkedList<>(track)); track.removeLast(); return; } dfs(root.left, sum, track); dfs(root.right, sum, track); track.removeLast(); }
|
时间复杂度:O(n) 不能确定:虽然是回溯思路,每个节点只访问了一次。
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github