【代码随想录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;
    }
};
相关推荐
2401_8414956418 小时前
【计算机视觉】基于复杂环境下的车牌识别
人工智能·python·算法·计算机视觉·去噪·车牌识别·字符识别
Jonkin-Ma18 小时前
每日算法(1)之单链表
算法
南尘NCA866619 小时前
企业微信防封防投诉拦截系统:从痛点解决到技术实现
java·网络·企业微信
晚风残19 小时前
【C++ Primer】第六章:函数
开发语言·c++·算法·c++ primer
杨云强19 小时前
离散积分,相同表达式数组和公式
算法
地平线开发者19 小时前
征程 6 | BPU trace 简介与实操
算法·自动驾驶
满天星830357719 小时前
【C++】AVL树的模拟实现
开发语言·c++·算法·stl
怪兽201420 小时前
SQL优化手段有哪些
java·数据库·面试
ss27320 小时前
手写MyBatis第107弹:@MapperScan原理与SqlSessionTemplate线程安全机制
java·开发语言·后端·mybatis
Lris-KK20 小时前
力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历
python·算法·leetcode