题目:
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
代码:
方法一——递归方法,前序遍历法:
class Solution {
public:
vector<vector<int>> res;
void findpath(TreeNode* root,int sum,vector<int>& v){
if(!root->left&&!root->right){
if(sum==root->val){v.push_back(root->val);res.push_back(v);v.pop_back();}
return;
}else{
v.push_back(root->val);
if(root->left)findpath(root->left,sum-root->val,v);
if(root->right)findpath(root->right,sum-root->val,v);
v.pop_back();
}
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
if(!root)return {};
vector<int> v;
findpath(root,sum,v);
return res;
}
};
注意:只有当当前节点为叶子节点且sum=value的时候,才能加入到res中,其他情况都不能加,sum比root->val大或者比root->val小都不能说明什么。注意节点的值有可能为负值。
我的思路和剑指Offer教程上的思路一样。