[LeetCode] 113. Path Sum II
来源:互联网 发布:投影互动软件破解 编辑:程序博客网 时间:2024/04/30 10:42
题目:
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]]
答案:
典型的DFS,可以用回溯的方式去解。
参考代码:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> ans = new ArrayList<>(); if (root != null) { List<Integer> cur = new ArrayList<>(); cur.add(root.val); solve(ans, root, sum, cur); } return ans; } private void solve(List<List<Integer>> ans, TreeNode root, int sum, List<Integer> cur) { if (root.left == null && root.right == null) { if (root.val == sum) { ans.add(new ArrayList<>(cur)); } } else { if (root.left != null) { cur.add(root.left.val); solve(ans, root.left, sum - root.val, cur); cur.remove(cur.size()-1); } if (root.right != null) { cur.add(root.right.val); solve(ans, root.right, sum - root.val, cur); cur.remove(cur.size()-1); } } }}
延伸思考:如果不要求一定是根到叶子的路径,而是任意两个节点的路径应该怎么解呢?
参考解法:(代码没有经过测试)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> ans = new ArrayList<>(); if (root != null) { ArrayList<Integer> sums = new ArrayList<>(); sums.add(0); // 可以添加任意一个值 solve(ans, root, new ArrayList<>(), sums, sum); } return ans; } private void solve(List<List<Integer>> ans, TreeNode root, List<Integer> cur, List<Integer> sums, int target) { if (root != null) { cur.add(root.val); int newSum = root.val + sums.get(sums.size()-1); for (int i = 0; i < sums.size(); i++) { if (newSum - sums.get(i) == target) { ans.add(new ArrayList<>(cur.subList(i, cur.size()))); } } sums.add(newSum); solve(ans, root.left, cur, sums, target); solve(ans, root.right, cur, sums, target); sums.remove(sums.size() - 1); cur.remove(cur.size() - 1); } }}
1 0
- LeetCode 113. Path Sum II
- [LeetCode]113.Path Sum II
- [Leetcode] 113. Path Sum II
- [leetcode] 113.Path Sum II
- [LeetCode]113. Path Sum II
- LeetCode: 113. Path Sum II
- leetcode 113. Path Sum II
- 113. Path Sum II LeetCode
- leetcode 113. Path Sum II
- LeetCode *** 113. Path Sum II
- Leetcode 113. Path Sum II
- LeetCode 113. Path Sum II
- LeetCode 113. Path Sum II
- LeetCode - 113. Path Sum II
- Leetcode 113. Path Sum II
- [LeetCode] 113. Path Sum II
- [leetcode] 113. Path Sum II
- [LeetCode] 113. Path Sum II
- MATLAB进行二值处理并提取像素值
- 考试题目解答 (持续更新)
- Contains Duplicate II
- CCNA学习笔记1--ip地址分类和水晶头线序和设备互联法则
- http://edu.qq.com/a/20151012/055363.htm
- [LeetCode] 113. Path Sum II
- Java连接SQL Server 2008和My SQL数据库的简单操作(1)
- 内核中操作寄存器的方法
- UCI机器学习库和一些相关算法
- 我对javaFx的简单认识
- android热修复
- ROS学习笔记十:用C++编写一个简单的服务和客户端
- socket通信中select函数的使用和详解
- 【bug】org.hibernate.dialect.OracleDialect does not support identity key generation