[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
本题难度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 |