【代码随想录day 16】 力扣 112. 路径总和

求路径总和,明确以下几点:

  1. 从根节点遍历到叶子节点,count一路减去val,当到叶子节点count正好为0时,证明这条路径就是答案,返回true
  2. 一旦收到true就停止遍历,找到一条答案就不找其他的了
  3. 当一条路径遍历完后需要回溯,count值也应该要加回来
  4. 在第一次进入递归函数时count就要减去root的val了。
cpp 复制代码
class Solution {
public:
    bool traversal(TreeNode *node, int count)
    {
        //判断终止条件
        //1.遍历到叶子节点,count逐渐减为0
        //2.遍历到叶子节点,但count不为0
        if(node->left == NULL && node->right == NULL && count == 0)
        {
            return true;
        }
        if(node->left == NULL && node->right == NULL && count != 0)
        {
            return false;
        }
        //开始递归 左
        if(node->left)
        {
            //先减去count
            count = count - node->left->val;
            //递归
            if(traversal(node->left,count))
            {
                return true;
            }
            //回溯
            count = count + node->left->val;
        }
        //开始递归 右
        if(node->right)
        {
            //先减去count
            count = count - node->right->val;
            //递归
            if(traversal(node->right,count))
            {
                return true;
            }
            //回溯
            count = count + node->right->val;
        }
        return false;
    }
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(!root) return false;
        bool result = traversal(root,targetSum-root->val);

        return result;
    }
};
相关推荐
superman超哥1 天前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
韩立学长1 天前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
ss2731 天前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛1 天前
Spring的cacheEvict
java·后端·spring
Learner__Q1 天前
每天五分钟:滑动窗口-LeetCode高频题解析_day3
python·算法·leetcode
SAP小崔说事儿1 天前
在数据库中将字符串拆分成表单(SQL和HANA版本)
java·数据库·sql·sap·hana·字符串拆分·无锡sap
凌云若寒1 天前
半导体代加工企业标签模板痛点的全景式解决方案
java
阿昭L1 天前
leetcode链表相交
算法·leetcode·链表
闻缺陷则喜何志丹1 天前
【计算几何】仿射变换与齐次矩阵
c++·数学·算法·矩阵·计算几何
shoubepatien1 天前
JAVA -- 11
java·后端·intellij-idea