【leetcode】113.(Medium)Path Sum II
阿新 • • 發佈:2019-01-03
解題思路:
遞迴
提交程式碼:
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
if(root==null) return res;
List<Integer> curPath=new ArrayList<Integer> ();
curPath.add(root.val);
if(root.left==null&&root.right==null&&root.val==sum) {
res.add(curPath);
return res;
}
if(root.left!=null) {
curPath.add(root.left.val);
findPath(root.left,curPath,sum-root.val,res);
curPath.remove((Integer)root.left.val);
}
if(root.right!=null) {
curPath.add(root.right.val);
findPath(root.right,curPath,sum-root.val,res);
}
return res;
}
private void findPath(TreeNode root,List<Integer> curPath,
int sum,List<List<Integer>> res) {
if(root==null) return;
if(root.left==null&&root.right==null&&root.val==sum) {
res.add(new ArrayList<>(curPath));
return;
}
if(root.left!=null) {
curPath.add(root.left.val);
findPath(root.left,curPath,sum-root.val,res);
curPath.remove(curPath.size()-1);
}
if(root.right!=null) {
curPath.add(root.right.val);
findPath(root.right,curPath,sum-root.val,res);
curPath.remove(curPath.size()-1);
}
}
private void removeValue(int val,List<Integer> path) {
for(int i=path.size()-1;i>=0;i--) {
if(path.get(i)==val) {
path.remove(i);
break;
}
}
}
}
執行結果: