题目分析:[[EVD]] - 剑指 Offer 34. 二叉树中和为某一值的路径
https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/
简单描述:
- 给一颗二叉树,求和为targetSum的所有路径
限制🚫
- 树中节点总数在范围 [0, 5000] 内
- -1000 <= Node.val <= 1000
- -1000 <= targetSum <= 1000
示例:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]
解题思路:
思路:
- #DFS 遍历二叉树
- 补充:c++中emplace_back和pop_back会有一些区别,详见c++中emplace_back和pop_back区别
https://blog.csdn.net/p942005405/article/details/84764104
- 补充:c++中emplace_back和pop_back会有一些区别,详见c++中emplace_back和pop_back区别
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
private:
vector<vector<int> > res;
vector<int> tmp;
void dfs(TreeNode *node, int sum)
{
if (!node)
return;
sum -= node->val;
tmp.emplace_back(node->val);
if (!node->left && !node->right && sum == 0)
{
res.emplace_back(tmp);
tmp.pop_back();
return;
}
dfs(node->left, sum);
dfs(node->right, sum);
tmp.pop_back();
}
public:
/*dfs*/
vector<vector<int> > pathSum(TreeNode *root, int target)
{
dfs(root, target);
return res;
}
};