“`java
class Solution {
List> res;
int target;
public List> pathTarget(TreeNode root, int target) {
res = new ArrayList<>();
if (root == null) {
return res;
}
this.target = target;
List tmp = new ArrayList<>();
dfs(root, tmp);
return res;
}
public void dfs(TreeNode node, List<Integer> list) {
if (node == null) {
return;
}
list.add(node.val);
//到达叶子节点,判断和是否等于target
if (node.left == null && node.right == null) {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += list.get(i);
}
if (sum == target) {
List<Integer> resList = new ArrayList<>();
resList.addAll(list);
res.add(resList);
}
list.remove(list.size() - 1);
return;
}
dfs(node.left, list);
dfs(node.right, list);
list.remove(list.size() - 1);
}
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def pathSum(self, root: Optional[TreeNode], targetSum: int) -> List[List[int]]:
res = []
cur = []
def dfs(root, target):
if not root:
return
cur.append(root.val)
target -= root.val
if not root.left and not root.right and target == 0:
res.append(cur.copy())
dfs(root.left, target)
dfs(root.right, target)
cur.pop()
target += root.val
return
dfs(root, targetSum)
return res
共以下 14 个回答
“`java
class Solution {
List
> res;> pathTarget(TreeNode root, int target) { tmp = new ArrayList<>();
int target;
public List
res = new ArrayList<>();
if (root == null) {
return res;
}
this.target = target;
List
dfs(root, tmp);
return res;
}
}
/**> res; tmp; > pathTarget(TreeNode root, int target) {
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
List<List
List
public List<List
res = new ArrayList<>();
tmp = new ArrayList<>();
dfs(root,target);
return res;
}
void dfs(TreeNode root, int target){
if(rootnull){
return;
}
tmp.add(root.val);
target = target-root.val;
if(root.rightnull&&root.leftnull&&target0){
res.add(new ArrayList<>(tmp));
}
dfs(root.left,target);
dfs(root.right,target);
tmp.remove(tmp.size()-1);
}
}
时间复杂度O(n)
空间复杂度O(n)
时间复杂度o(logn),kongjian o(n)
时间复杂度:O(n)
空间复杂度:O(n)
【思路】回溯
【复杂度】时间复杂度O(n),空间复杂度O(logn)
C++实现
“`C++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void dfs(TreeNode* node, int targetSum, int currentSum, vector& path,vector<vector >& result) {
if (!node) {
return;
}
}
std::vector<std::vector> pathSum(TreeNode* root, int targetSum) { > result; path;
std::vector<std::vector
std::vector
dfs(root, targetSum, 0, path, result);
return result;
}
“`
思路:DFS
时间复杂度:O(n) 空间复杂度:O(n)
dfs
时间:O(n^2)
空间:O(n)
每次做,每次都不会系列
本质回溯
时间复杂度O(n)
MY