112. 路径总和 - 力扣(LeetCode)
1、用队列
两个队列,先进先出
node队列存节点;
sum队列存每条路径走到这个节点的val的总和;
节点和总和对应着同时存入队列,同时出队列;
class Solution {
public:bool hasPathSum(TreeNode* root, int targetSum) {if(root == nullptr)return false;queue<TreeNode*> node;queue<int> sum;node.push(root);sum.push(root->val);while(!node.empty()){TreeNode* now = node.front();int tmp = sum.front();node.pop();sum.pop();if(now->left == nullptr && now->right == nullptr){if(tmp == targetSum){return true;}continue; }if(now->left !=nullptr){node.push(now->left);sum.push(now->left->val + tmp);}if(now->right !=nullptr){node.push(now->right);sum.push(now->right->val + tmp);}}return false;}
};
2、递归
targetsum每层-root->val直到和最后一个不为空的root->val相等;
每次递归传当前节点的左右子树以及当前节点的val直到root为空结束
class Solution {
public:bool hasPathSum(TreeNode* root, int targetSum) {if (root == nullptr) {return false;}if(root->left == nullptr && root->right == nullptr){return targetSum == root->val;}return hasPathSum(root->left,targetSum - root->val) || hasPathSum(root->right, targetSum - root->val);}
};