leetcode 112 路径总和I
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root==NULL) return false;
if(root->left==NULL && root->right==NULL && root->val==sum)
return true;
return hasPathSum(root->left, sum-root->val) || hasPathSum(root->right, sum-root->val);
}
};
leetcode 113 路径总和II
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> ans;
vector<int> t;
findpath(ans,t, root,sum);
return ans;
}
private:
void findpath(vector<vector<int>> & ans,vector<int> t, TreeNode * root, int sum){
if(root==NULL) return ;
t.push_back(root->val);
if(root->left==NULL && root->right==NULL && root->val==sum){
ans.push_back(t);
return ;
}
findpath(ans,t,root->left,sum-root->val);
findpath(ans,t,root->right,sum-root->val);
}
};
leetcode 437 路径总和 III
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
int ans=0;
pre(root,sum,ans);
return ans;
}
private:
void pre(TreeNode * root, int sum, int & ans){
if(root==NULL) return;
findpath(root, sum, ans);
pre(root->left,sum, ans);
pre(root->right,sum,ans);
}
void findpath(TreeNode * node, int sum, int & ans){
if(node==NULL) return ;
if(node->val == sum){
ans++;
}
findpath(node->left, sum-node->val,ans);
findpath(node->right,sum-node->val,ans);
}
};
leetcode 257
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> ans;
string s;
findpath(root, ans, s);
return ans;
}
private:
void findpath(TreeNode * root, vector<string> & ans , string s){
if(root==NULL) {
return ;
}
if(root->left==NULL && root->right==NULL) {
s += to_string(root->val);
ans.push_back(s);
return ;
}
s += to_string(root->val);
s += "->";
findpath(root->left,ans,s);
findpath(root->right,ans,s);
}
};