参考链接:
/**
* 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 {
vector<vector<int>> res;
public:
void pathFind(TreeNode* root, int nowsum , vector<int> tpath ,int sum){
nowsum= nowsum+ root->val;
tpath.push_back(root->val);
//只对相等的情况入栈,还有只在左右子节点都为空的情况下才检查是否是和为指定值
if(!root->left && !root->right){
if(nowsum == sum){
res.push_back(tpath);
//返回的是上一层,正好继续对左右子树探测。这个我运用的不是很好
return;
}
}
//当左子树存在的情况
if(root->left){
pathFind(root->left , nowsum , tpath , sum);
}
if(root->right){
pathFind(root->right , nowsum , tpath , sum);
}
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<int> tpath;
if(root == NULL){
return res;
}
//int nowsum = 0;
//忽略一切情况只记录相等情况
//递归计算
pathFind(root ,0 , tpath , sum);
return res;
}
};