问题描述: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.
Note: A leaf is a node with no children.
Example:
Given the below binary tree and sum = 22,
解释:就是从根节点到叶子节点中的每一条路径上的节点数相加是否会等于输入数
思路:设一个整数ssm,一条路径算到最后,如果不行就网上回溯至分支处再算
陷阱:一开始我以为都是整数,所以做了个判断if(ssm>sum)则直接退出,
其实人家负数也算在里面的,所以必须每条路径从头算到尾
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
// 递归+回溯法
class Solution {
bool flag = false;
int ssm = 0;
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL) return false;
if( flag) return true;
ssm += root->val; // 每测到一个节点,自增
if(root->left == NULL && root->right == NULL&& ssm == sum){ // 该节点为叶节点并且查到该值时,flag = true
flag = true;
return true;
}
if(root->left == NULL && root->right == NULL && ssm != sum){ // 叶节点但是查不到该值时,回溯到上一个单位
ssm -= root->val;
return false;
}
if(root->left != NULL){
hasPathSum(root->left,sum); // 左递归
}
if(root->right != NULL){
hasPathSum(root->right,sum); // 右递归
}
ssm -= root->val; // 都不行则一层层往上回溯
return flag;
}
};