输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径
思路:这里的路径是指根节点到叶子节点。定义一个辅助函数,递归遍历树;遍历到的节点,若不为空,则将节点值加入当前路径;判断节点是否为叶子节点,若不是,递归遍历子节点,若是且target==root->val,将当前路径放入结果中。遍历完当前节点之后的所有节点,当前节点pop()出路径
vector<vector<int>>res;
void helper(vector<int>&vec,TreeNode* root,int target){
if(!root)return;
vec.push_back(root->val);
if(root->left||root->right){
helper(vec,root->left,target-root->val);
helper(vec,root->right,target-root->val);
}else if(target==root->val){
res.push_back(vec);
}
vec.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int target) {
vector<int>vec;
helper(vec,root,target);
return res;
}