A simple question: Determine whether the sum path exists.
The result is wa twice. One is because the conditions for deep search to stop are not taken into account, and the other is because the path must be from root to leaf.
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 if (root == NULL) {14 return false;15 } else {16 if (sum == root->val && root->left == NULL && root->right == NULL) {17 return true;18 }19 sum -= root->val;20 return hasPathSum(root->left, sum) || hasPathSum(root->right, sum);21 }22 }23 };
For the first time, I encountered the same problem as the problem solution, but the problem solution is simpler and more efficient than I did, reducing the call when root = NULL.
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 if (root == NULL) {14 return false;15 } else {16 if (root->left == NULL && root->right == NULL) {17 return sum == root->val;18 }19 sum -= root->val;20 return hasPathSum(root->left, sum) || hasPathSum(root->right, sum);21 }22 }23 };