题目:
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.
思路:DFS,遇到叶子结点判断和。
class Solution {
public:
int trace;
bool path_sum_helper(TreeNode* root, int sum) {
if (root == nullptr) return false;
trace += root->val;
if (root->left == nullptr && root->right == nullptr) {
if (trace == sum) return true;
trace -= root->val;
return false;
}
if (path_sum_helper(root->left, sum)) return true;
if (path_sum_helper(root->right, sum)) return true;
trace -= root->val;
return false;
}
bool hasPathSum(TreeNode *root, int sum) {
trace = 0;
return path_sum_helper(root, sum);
}
};
总结:复杂度为O(2^n).