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.
不用多说,递归周游即可。
1 /**
2 * Definition for binary tree
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10 class Solution {
11 public:
12 bool hasPathSum(TreeNode *root, int sum) {
13 // Start typing your C/C++ solution below
14 // DO NOT write int main() function
15 if(root == NULL)
16 return false;
17 return DepthFirst(root,0,sum);
18
19 }
20 bool DepthFirst(TreeNode *root,int s,int sum)
21 {
22 if(root->left == NULL && root->right == NULL)
23 {
24 if(s + root->val == sum)
25 return true;
26 else
27 return false;
28 }
29 if(root->left != NULL)
30 {
31 bool leftResult;
32 leftResult = DepthFirst(root->left,s+root->val,sum);
33 if(leftResult == true)
34 return true;
35 }
36 if(root->right != NULL)
37 {
38 bool rightResult;
39 rightResult = DepthFirst(root->right,s+root->val,sum);
40 if(rightResult == true)
41 return true;
42 }
43 return false;
44 }
45 };