链接
https://leetcode-cn.com/problems/path-sum-ii/
耗时
解题:31 min
题解:10 min
题意
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
思路
每次 + 的总和 = sum,相当于每次 - 最后的剩余 rest = 0。
临界条件自然就是 叶节点,如果当前节点是叶节点,判断 rest - 当前节点值是否等于 0。如果等于 0 说明找到了,加入结果,不等于说明不行。
如果不是叶节点就 dfs 左右节点,剩余 rest 就减当前节点值。
时间复杂度: O ( n ) O(n) O(n)
AC代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
vector<vector<int>> ans;
vector<int> path;
public:
void dfs(TreeNode* root, int rest) {
if(root == NULL) return ;
path.push_back(root->val);
if(root->left == NULL && root->right == NULL) {
if(rest-(root->val) == 0) {
ans.push_back(path);
}
path.pop_back();
return ;
}
dfs(root->left, rest-(root->val));
dfs(root->right, rest-(root->val));
path.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
dfs(root, sum);
return ans;
}
};