LeetCode 113. Path Sum II(路径和)
2016-05-24 00:19
411 查看
原题网址:https://leetcode.com/problems/path-sum-ii/
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
方法:深度优先搜索。
另一种实现:
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] ]
方法:深度优先搜索。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { private List<List<Integer>> paths = new ArrayList<>(); private void find(TreeNode root, List<Integer> values, int currentSum, int targetSum) { if (root == null) return; values.add(root.val); currentSum += root.val; if (root.left != null && root.right != null) { find(root.left, values, currentSum, targetSum); find(root.right, values, currentSum, targetSum); } else if (root.left != null) { find(root.left, values, currentSum, targetSum); } else if (root.right != null) { find(root.right, values, currentSum, targetSum); } else if (currentSum == targetSum) { List<Integer> path = new ArrayList<>(values.size()); path.addAll(values); paths.add(path); } values.remove(values.size()-1); } public List<List<Integer>> pathSum(TreeNode root, int sum) { find(root, new ArrayList<>(), 0, sum); return paths; } }
另一种实现:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { private List<List<Integer>> results = new ArrayList<>(); private void find(List<Integer> path, TreeNode root, int sum) { if (root == null) return; if (root.left == null && root.right == null && root.val == sum) { List<Integer> result = new ArrayList<>(); result.addAll(path); result.add(root.val); results.add(result); return; } path.add(root.val); if (root.left != null) { find(path, root.left, sum-root.val); } if (root.right != null) { find(path, root.right, sum-root.val); } path.remove(path.size()-1); } public List<List<Integer>> pathSum(TreeNode root, int sum) { find(new ArrayList<>(), root, sum); return results; } }
相关文章推荐
- LeetCode 114. Flatten Binary Tree to Linked List(摊平二叉树)
- LeetCode 115. Distinct Subsequences(子序列数量)
- LeetCode 116. Populating Next Right Pointers in Each Node(右邻)
- LeetCode 117. Populating Next Right Pointers in Each Node II(右邻)
- LeetCode 118. Pascal's Triangle(帕斯卡三角)
- LeetCode 119. Pascal's Triangle II(帕斯卡三角)
- Git分支管理
- MyEclipse功能
- 代理模式
- 01背包和部分背包问题
- bzoj1355【Baltic2009】Radio Transmission
- HDU5691-Sitting in Line-状态压缩
- LeetCode 111. Minimum Depth of Binary Tree(二叉树最小深度)
- LeetCode 112. Path Sum(路径和)
- OSChina 周二乱弹 ——查寝大妈,你写我在床上硬不起来是怎么回事!
- js出现allocation size overflow以及字符串拼接优化
- (1048, "Column 'user_id' cannot be null")
- Python 正则表达式里面 贪婪模式和非贪婪模式的区别
- AsyncTask - 基本原理 图文剖析
- JS