【代码随想录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;
    }
};
相关推荐
写bug写bug16 分钟前
搞懂Spring任务执行器和调度器模型
java·后端·spring
范特西_17 分钟前
矩阵中的最长递增路径-记忆化搜索
c++·算法
熊猫片沃子29 分钟前
Maven在使用过程中的核心知识点总结
java·后端·maven
都叫我大帅哥30 分钟前
🌊 限流算法百科全书:从原理到实践,一篇搞定高并发流量管控
java·算法
tanxiaomi32 分钟前
✨ 基于 JsonSerialize 实现接口返回数据的智能枚举转换(优雅告别前端硬编码!)
java·前端·spring·spring cloud·mybatis
醉卧红尘的鱼1 小时前
随机向量正交投影定理(Orthogonal Projection Theorem, OPT)_学习笔记
学习·算法
星你1 小时前
用Spring Boot 搭建自己的 MCP Server
java·后端
汤永红2 小时前
第4章 程序段的反复执行4 多重循环练习(题及答案)
数据结构·c++·算法·信睡奥赛
回家路上绕了弯2 小时前
深度理解 volatile 与 synchronized:并发编程的两把钥匙
java·后端
程序员清风2 小时前
ThreadLocal在什么情况下会导OOM?
java·后端·面试