Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum
,
= 22
5 / 4 8 / / 11 13 4 / \ 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2
which sum is 22.
是否存在从根节点到叶子节点的和,等于所给的数。
递归 one
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void solve(TreeNode* root,int sum,bool& f,int s){ if(!root->left&&!root->right){ if(s==sum) f=true; return; } if(root->left) solve(root->left,sum,f,s+root->left->val); if(root->right) solve(root->right,sum,f,s+root->right->val); } bool hasPathSum(TreeNode* root, int sum) { bool f=false; if(!root) return false;// 为空 则返回false solve(root,sum,f,root->val); return f; } };
递归 two
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool hasPathSum(TreeNode* root, int sum) { return solve(root,sum,0); } bool solve(TreeNode* root,int sum,int s){ if(!root) return false; if(!root->left&&!root->right) return sum==s+root->val; return solve(root->left,sum,s+root->val)||solve(root->right,sum,s+root->val);//存在即可 故用 || } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-29 04:31:57