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.
题目大意: 给定二叉树中,是否存在某条从根到叶子的路径使得每个节点之和等于给定值sum.
原题链接: https://leetcode.com/problems/path-sum/
我使用的方法是递归,代码简单易懂,但是运行效率不高.
bool hasPathSum(struct TreeNode* root, int sum) {
if (NULL == root) {
return false;
}
int lastSum = sum;
sum -= root->val;
if (0 > (lastSum * sum)) {
return false;
}
if ((NULL == root->left) && (NULL != root->right)) {
return hasPathSum(root->right, sum);
} else if ((NULL != root->left) && (NULL == root->right)) {
return hasPathSum(root->left, sum);
} else if ((NULL == root->left) && (NULL == root->right)) {
return (0 == sum);
} else {
return (hasPathSum(root->left, sum) || hasPathSum(root->right, sum));
}
}