题目链接
思路分析
首先是要找到一条路径,那么如何判断是一条路径了,就是当前节点的左右孩子都为空,及说明该节点就是这条路径上的最后一个节点,其次,题目还要求该路径上的值满足一个值,所以我们需要维护一个变量sum用来保存当前路径上的和。
if(root->left == nullptr && root->right == nullptr && sum == target)
{
ret.push_back(path);
return ;
}
如果当前节点不是最后节点的话, 我们将不为空的左右节点加入数组,进入回溯。
代码实现
/**
* 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>> ret;
vector<int> path;
void backtracking(TreeNode* root, int target, int sum)
{
if(root->left == nullptr && root->right == nullptr && sum == target)
{
ret.push_back(path);
return ;
}
if(root->left)
{
sum += root->left->val;
path.push_back(root->left->val);
backtracking(root->left, target, sum);
path.pop_back();
sum -= root->left->val;
}
if(root->right)
{
sum += root->right->val;
path.push_back(root->right->val);
backtracking(root->right, target, sum);
path.pop_back();
sum -= root->right->val;
}
return ;
}
vector<vector<int>> pathSum(TreeNode* root, int target) {
if(root == nullptr)
return ret;
int sum = root->val;
path.push_back(root->val);
backtracking(root, target, sum);
return ret;
}
};