/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
bool hasPathSum(TreeNode* root, int sum) {
if (root == nullptr) return false;
return traversal(root, sum - root->val);
}
bool traversal(TreeNode* node, int count) {
// 到达叶子节点
if (node->left == nullptr && node->right == nullptr && count == 0) {
return true;
}
if (node->left == nullptr && node->right == nullptr && count != 0) {
return false;
}
if (node->left) {
count -= node->left->val;
// 向上返回
if (traversal(node->left, count)) {
return true;
}
count += node->left->val; // 回溯
}
if (node->right) {
count -= node->right->val;
// 向上返回
if (traversal(node->right, count)) {
return true;
}
count += node->right->val; // 回溯
}
return false;
}
};