2023-09-19 18:54阅读: 3评论: 0推荐: 0

《剑指Offer》-34-二叉树中和为某一值的路径

思路

要求是从根节点开始的路径,这会比从任意节点开始的路径简单很多

思路是从根节点开始遍历每一条路径,如果和没有达到目标值就继续向下遍历
大于就回退,等于就返回到结果集中,可以看到这是一个回溯动作

实际过程中,首先不管是等于还是大于,回退pop()操作都要执行,这样才不会影响到后面

其次,这里要求必须到叶子节点的路径,如果不是叶子节点就不算

最后这里可能出现负数,所以就不能说大于了,去掉剪枝

vector<vector<int>> pathSum(TreeNode* root, int target) {
vector<vector<int>> res;
vector<int> temp;
backTrace(root, target, res, temp);
return res;
}
void backTrace(TreeNode* root, int target, vector<vector<int>>& res, vector<int>& temp) {
if (!root) return;
temp.push_back(root->val);
if (root->val == target && !root->left && !root->right) res.push_back(temp);
else {
backTrace(root->left, target-root->val, res, temp);
backTrace(root->right, target-root->val, res, temp);
}
temp.pop_back();
}

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17715525.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(3)  评论(0编辑  收藏  举报
历史上的今天:
2022-09-19 力扣-210-课程表Ⅱ
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起