leetcode112路径总和刷题打卡

简介: leetcode112路径总和刷题打卡
112. 路径总和

题目描述

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false

题解思路-----正在艰难的学习回溯。。。

  • 递归法
  • 包含了回溯,回溯我现在的理解就是可以访问未知输入的每一种情况
  • 本题就是利用回溯来枚举每一种情况,查看是否符合题目要求
  • 思路是设置一个count来等于targetSum,然后每搜索到一个节点就将count减去该节点的值,如果到了叶子节点,count为0,则返回false

递归三件套

  • 确定参数与返回值
  • 参数为根节点和count,返回一个bool值
  • 确定终止条件
  • 当该节点是叶子节点且count降为了0返回true
  • 当该节点是叶子节点且count不为0返回false
  • 确定本层逻辑
  • 递归函数是有返回值的,如果递归函数返回true,说明找到了合适的路径,应该立刻返回。
  • 回溯的部分也是在这里
if(root->left){
    count -= root->left->val;  //回溯
    if(backTravaling(root->left,count)) return true;
    count += root->left->val;  //回溯
}
if(root->right){
  count -= root->right->val;  //回溯
    if(backTravaling(root->right,count)) return true;
    count += root->right->val;  //回溯
}
  • 简化版
if(root->left) 
    if(backTracking(root->left, count - root->left->val)) return true;
if(root->right)
    if(backTracking(root->right, count - root->right->val)) return true;

完整代码:

class Solution {
public:
    bool backTravaling(TreeNode * root, int count){
        if(!root->left&&!root->right&& count == 0) return true;  //中
        if(!root->left&&!root->right) return false;
        if(root->left){  //左
            count -= root->left->val;
            if(backTravaling(root->left,count)) return true;
            count += root->left->val;
        }
        if(root->right){  //右
            count -= root->right->val;
            if(backTravaling(root->right,count)) return true;
            count += root->right->val;
        }
        return false;
    }
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(!root) return false;
        int sum = targetSum;
        return backTravaling(root,targetSum - root->val);
    }
};


相关文章
【LeetCode 35】112.路径总和
【LeetCode 35】112.路径总和
129 0
|
7月前
|
Go 开发者 索引
【LeetCode 热题100】路径与祖先:二叉树中的深度追踪技巧(力扣33 / 81/ 153/154)(Go语言版)
本文深入探讨了LeetCode中四道关于「搜索旋转排序数组」的经典题目,涵盖了无重复和有重复元素的情况。通过二分查找的变形应用,文章详细解析了每道题的解题思路和Go语言实现代码。关键点包括判断有序区间、处理重复元素以及如何缩小搜索范围。文章还总结了各题的异同,并推荐了类似题目,帮助读者全面掌握二分查找在旋转数组中的应用。无论是初学者还是有经验的开发者,都能从中获得实用的解题技巧和代码实现方法。
316 14
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
255 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
8月前
|
算法 Go
【LeetCode 热题100】深入理解二叉树结构变化与路径特性(力扣104 / 226 / 114 / 543)(Go语言版)
本博客深入探讨二叉树的深度计算、结构变换与路径分析,涵盖四道经典题目:104(最大深度)、226(翻转二叉树)、114(展开为链表)和543(二叉树直径)。通过递归与遍历策略(前序、后序等),解析每题的核心思路与实现方法。结合代码示例(Go语言),帮助读者掌握二叉树相关算法的精髓。下一讲将聚焦二叉树构造问题,欢迎持续关注!
198 10
|
8月前
|
Go
【LeetCode 热题100】路径与祖先:二叉树中的深度追踪技巧(力扣437 / 236 )(Go语言版)
本文深入探讨二叉树中路径与祖先问题,涵盖两道经典题目:LeetCode 437(路径总和 III)和236(最近公共祖先)。对于路径总和 III,文章分析了双递归暴力解法与前缀和优化方法,后者通过哈希表记录路径和,将时间复杂度从O(n²)降至O(n)。在最近公共祖先问题中,采用后序遍历递归查找,利用“自底向上”的思路确定最近公共祖先节点。文中详细解析代码实现与核心要点,帮助读者掌握深度追踪技巧,理解树结构中路径与节点关系的本质。这类问题在面试中高频出现,掌握其解法意义重大。
192 4
【LeetCode 36】113.路径总和II
【LeetCode 36】113.路径总和II
116 0
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
367 2
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
271 3
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
341 1
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
108 0

热门文章

最新文章