【LeetCode】Path Sum II
2014-01-08 15:42
375 查看
Path Sum II
Total Accepted: 4441 Total Submissions: 16502 My Submissions
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
return
Discuss
和Path Sum一样,解题思路参考LeetCode/Path Sum仍然是BFS和DFS,只不过要求出路径。
Java AC BFS
Java AC DFS
Total Accepted: 4441 Total Submissions: 16502 My Submissions
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] ]
Discuss
和Path Sum一样,解题思路参考LeetCode/Path Sum仍然是BFS和DFS,只不过要求出路径。
Java AC BFS
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) { if(root == null){ return new ArrayList<ArrayList<Integer>>(); } return bfs(root, sum); } public ArrayList<ArrayList<Integer>> bfs(TreeNode root, int sum){ ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); Queue<NodeSum> nodeQueue = new LinkedList<NodeSum>(); StringBuffer sb = new StringBuffer(root.val+" "); nodeQueue.offer(new NodeSum(root,root.val,sb)); while(!nodeQueue.isEmpty()){ NodeSum node = nodeQueue.peek(); nodeQueue.poll(); if(node.node.left == null && node.node.right == null && node.sum == sum){ ArrayList<Integer> tempList = new ArrayList<Integer>(); String msg[] = node.sb.toString().trim().split(" "); int len = msg.length; for(int i = 0; i < len; i++){ tempList.add(Integer.parseInt(msg[i])); } list.add(tempList); } TreeNode point = node.node; StringBuffer newsb = new StringBuffer(node.sb); int newSum = node.sum; if(point.left != null){ point = point.left; newsb.append(point.val+" "); nodeQueue.offer(new NodeSum(point,(newSum + point.val),newsb)); } newsb = new StringBuffer(node.sb); point = node.node; if(point.right != null){ point = point.right; newsb.append(point.val+" "); nodeQueue.offer(new NodeSum(point,(newSum + point.val),newsb)); } } return list; } public class NodeSum { int sum ; TreeNode node; StringBuffer sb ; NodeSum(TreeNode root ,int sum, StringBuffer sb){ super(); this.node = root; this.sum = sum; this.sb = sb; } } }
Java AC DFS
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) { if(root == null){ return new ArrayList<ArrayList<Integer>>(); } ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); List<String> numList = new ArrayList<String>(); StringBuffer sb = new StringBuffer(); dfs(root, numList ,sb, 0, sum); int size = numList.size(); for(int i = 0; i < size; i++){ ArrayList<Integer> tempList = new ArrayList<Integer>(); String msg[] = numList.get(i).split(" "); for (int j = 0; j < msg.length; j++) { tempList.add(Integer.parseInt(msg[j])); } list.add(tempList); } return list; } public void dfs(TreeNode point, List<String> numList, StringBuffer sb ,int allsum, int sum){ if (point == null) { return; } if(point.left == null && point.right == null){ sb.append(point.val+" "); if (allsum+point.val == sum) { String tempStr = sb.toString().trim(); numList.add(tempStr); } } StringBuffer newsb = new StringBuffer(sb); sb.append(point.val+" "); dfs(point.left, numList, sb, allsum+point.val, sum); newsb.append(point.val+" "); dfs(point.right, numList, newsb, allsum+point.val, sum); } }
相关文章推荐
- [Leetcode] Path Sum II (Java)
- [leetcode] @python 113. Path Sum II
- Path Sum II--LeetCode
- [LeetCode]112. Path Sum&113. Path Sum II
- leetcode 113. Path Sum II 二叉树求符合和值为sum的链
- LeetCode力扣之113. Path Sum II
- [LeetCode] Path Sum II
- [leetcode]Path Sum II
- [leetCode]Path Sum&&Path Sum II
- LeetCode 64/62/63. Minimum Path Sum/ Unique Paths i, ii
- LeetCode题解:Path Sum I and II
- 【Leetcode】Path Sum II
- [LeetCode] Path Sum && Path Sum II
- leetcode 113. Path Sum II-路径和|回溯算法
- leetcode--Path Sum II
- [leetcode]_Path Sum I && II
- [LeetCode] Unique Paths、Unique Paths II、Minimum Path Sum
- *Leetcode_path-sum-ii
- leetcode Path Sum II 关于树的后序遍历
- LeetCode:Path Sum I &&II