[LeetCode]Path Sum II

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


Question

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]
]

本题难度Medium。

【复杂度】
时间 O(b^(h+1)-1) 空间 O(h) 递归栈空间 对于二叉树b=2

【思路】
利用DFS对所有的根到叶子的路径进行遍历,对满足条件的叶子上的路径保存到结果​​​ans​​中。

【代码】

/**
* 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) {
//require
List<List<Integer>> ans=new LinkedList<>();
//invariant
helper(root,sum,new LinkedList<Integer>(),ans);
//ensure
return ans;
}
private void helper(TreeNode root, int sum,List<Integer> list,List<List<Integer>> ans){
//base case
if(root==null)return;
//base case
if(root.val==sum&&root.left==null&&root.right==null){
List<Integer> newList=new LinkedList<>(list);
newList.add(root.val);
ans.add(newList);
return;
}
//invariant
list.add(root.val);
helper(root.left,sum-root.val,list,ans);
helper(root.right,sum-root.val,list,ans);
list.remove(list.size()-1);
return;
}
}


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6