这道题还是二叉树里面一道很经典的题目,但是每次写递归都会学到新的东西,相信自己也会越来越了解线程执行过程,越来越了解递归。
这道题目的结束条件就是到叶子节点时候所有路径节点的值等于所给的值,并且在每一次没有满足条件的时候把当前节点放到路径里面,然后往下递归。
我注意到了一个点是当是全局变量的时候,在我们往下递归完一层层返回的时候需要减去这个全局变量,因为是全局变量,如果不减去的话会影响别的路径的计算,但是sum是每次传进去的变量,在递归完就不用减去,在每一次递归的时候都会把当前路径上的sum带过去。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int> > res;
vector<int>path;
void DepthSearch(TreeNode* root,int target,int sum)
{
if(root == nullptr)
return;
sum+=root->val;
path.push_back(root->val);
if(root->left== nullptr&&root->right==nullptr&&sum==target)
{
res.push_back(path);
}
DepthSearch(root->left,target,sum);
DepthSearch(root->right,target,sum);
// sum-=root->val;
path.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int target) {
int sum=0;
DepthSearch(root,target,sum);
return res;
}
};