算法思路:
典型的递归算法,递归的回退条件
- 1.当前节点为叶子节点并且路径之和满足条件
- 2.当前节点为叶子节点并且路径之和不满足条件
在加入递归前判断一下是否为空节点,若为空就无需进入递归,以免回退的处理操作太混乱
void pathSumCore(TreeNode* root, const int& sum, int& currentSum, vector<int>&path, vector<vector<int>>& pathArray)
{
currentSum += root->val;
path.push_back(root->val);
if (currentSum == sum && root->left == NULL && root->right == NULL)
{
pathArray.push_back(path);
return;
}
if (root->left)
{
pathSumCore(root->left, sum, currentSum, path, pathArray);
currentSum -= path.back();
path.pop_back();
}
if (root->right)
{
pathSumCore(root->right, sum, currentSum, path, pathArray);
currentSum -= path.back();
path.pop_back();
}
}
vector<vector<int>> pathSum(TreeNode* root, int sum)
{
vector<vector<int>>result;
vector<int>path;
if (root == NULL)
return result;
int currentSum = 0;
pathSumCore(root, sum, currentSum, path, result);
return result;
}