题目描述
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
题目分析
递归:
sum - root->val; 添加该节点值;
sum=0;是叶子节点则是有效路径,添加入res,回溯;
sum=0;不是叶子节点则是无效路径,将当前节点值pop,回溯;
sum!=0;不是叶子节点,无法判断是否有效,继续递归;
sum!=0;是叶子节点,无效路径,当前节点值pop,回溯。
class Solution {
public:
void PathSum(TreeNode* root, int sum, vector<int> &path, vector<vector<int> > &res){
sum -= root->val;
path.push_back(root->val);
if(sum == 0){
if(!root->left && !root->right){
res.push_back(path);
path.pop_back();
return ;
}
else{
path.pop_back();
return ;
}
}
if(root->left) PathSum(root->left, sum, path, res);
if(root->right)PathSum(root->right, sum, path, res);
path.pop_back();
}
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<int> path;
vector<vector<int> > res;
if(root)
PathSum(root, expectNumber, path, res);
return res;
}
};