class Solution {
public:
int sum=0;
vector<vector<int>> ans;
vector<int> track;
void backtrack(TreeNode* root, int targetSum){
if(root==nullptr) return;
sum+=root->val;
/*不要剪枝,因为节点有负数
if(sum>targetSum){
sum-=root->val;
return;
}
*/
track.emplace_back(root->val);
if(root->left==nullptr&&root->right==nullptr&&sum==targetSum){
ans.emplace_back(track);
}
backtrack(root->left, targetSum);
backtrack(root->right, targetSum);
sum-=root->val;
track.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
if(root==nullptr) return {};
backtrack(root, targetSum);
return ans;
}
};
题目中故意给的样例都为正数,引诱你剪枝,其实还有负数的情况哈哈,聪明反被聪明误
这篇博客讨论了一个C++实现的树形结构问题,涉及递归遍历寻找路径和等于特定目标值的路径。文章提醒读者在处理节点值可能为负数的情况下,避免过早剪枝,以免错过正确解。代码中展示了如何使用回溯法完整遍历所有可能路径,找到所有满足条件的节点序列。
302

被折叠的 条评论
为什么被折叠?



