输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
class Solution {
public:
void FindPathCore(TreeNode* root, int currSum,int target, vector<int>& tmp, vector<vector<int> >& result) {
if(root == NULL)
return;
currSum += root->val;
tmp.push_back(root->val);
bool isLeaf = (root->left == NULL && root->right == NULL);
if(currSum == target && isLeaf) {
result.push_back(tmp);
}
FindPathCore(root->left, currSum, target, tmp, result);
FindPathCore(root->right, currSum, target, tmp, result);
tmp.pop_back();//pop_back就行了 无需currSum -= root->val,因为一个是引用 一个不是引用。
}
vector<vector<int> > FindPath(TreeNode* root,int target) {
vector<vector<int> > result;
if (root == NULL)
return result;
int currSum = 0;
vector<int> tmp;
FindPathCore(root, currSum, target, tmp, result);
return result;
}
};