首页 > 其他分享 >路径总和-力扣

路径总和-力扣

时间:2024-06-11 19:59:21浏览次数:10  
标签:right TreeNode val sum 路径 力扣 left root 总和

本题想到的解法是对二叉树进行深度搜索,并记录路径和,当节点为叶子节点时,将路径和与目标值进行判断,如果相等则返回true,否则返回false,最后返回左右子树或的值即可,因为只需有一条满足条件就可以。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool dfs(TreeNode* root, int sum, int targetSum){
        if(root->left == nullptr && root->right == nullptr){
            sum += root->val;
            if(sum == targetSum){
                return true;
            }
            else{
                return false;
            }
        }
        sum += root->val;
        bool l_val = 0;
        bool r_val = 0;    
        if(root->left){
            l_val = dfs(root->left, sum, targetSum);
        }
        if(root->right){
            r_val = dfs(root->right, sum, targetSum);
        }
        return l_val || r_val;
    }

    bool hasPathSum(TreeNode* root, int targetSum) {
        int sum = 0;
        if(root == nullptr){
            return false;
        }
        return dfs(root, sum, targetSum);

    }
};

力扣官方的递归更为精妙,顺便记录一下:将问题转化为是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val。

class Solution {
public:
    bool hasPathSum(TreeNode *root, int sum) {
        if (root == nullptr) {
            return false;
        }
        if (root->left == nullptr && root->right == nullptr) {
            return sum == root->val;
        }
        return hasPathSum(root->left, sum - root->val) ||
               hasPathSum(root->right, sum - root->val);
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/path-sum/solutions/318487/lu-jing-zong-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:right,TreeNode,val,sum,路径,力扣,left,root,总和
From: https://blog.csdn.net/why_12134/article/details/139604110

相关文章

  • 左叶子之和-力扣
    本题计算二叉树的左叶子之和,使用后序遍历的顺序对二叉树进行深度搜索,关键点在于,对左叶子节点的值的操作上,需要在左叶子节点的父节点进行。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right......
  • 卫星通讯传输技术助力电力运维巡检效率提升:EasyCVR实现远程监控与管理的新路径
    随着科技的快速发展,视频监控技术已广泛应用于各个领域。而卫星通讯作为一种高效、稳定的通信方式,为视频监控系统的远程传输提供了有力支持。一、方案背景随着电力行业的快速发展,电力运维巡检工作变得愈发重要。传统的巡检方式往往受到地域、环境等因素的限制,难以实现对电力设备......
  • 前端使用 Konva 实现可视化设计器(14)- 折线 - 最优路径应用【代码篇】
    话接上回《前端使用Konva实现可视化设计器(13)-折线-最优路径应用【思路篇】》,这一章继续说说相关的代码如何构思的,如何一步步构建数据模型可供AStar算法进行路径规划,最终画出节点之间的连接折线。请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue......
  • 二叉树的所有路径-力扣
    这道题目需要返回给定二叉树所有从根节点到叶子节点的路径,那么对二叉树进行深度优先搜索,遇到节点就将其加到路径中,如果这个节点的左右子节点都为空,那么它就是一个叶子节点,将这条路径加入到结果数组中。这里将int转换为string使用了to_string()函数。/***Definition......
  • Leetcode 力扣114. 二叉树展开为链表 (抖音号:708231408)
    给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2......
  • 牛客热题:矩阵的最小路径和
    ......
  • 力扣每日一题 6/10
    881.救生艇[中等]题目:给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回 承载所有人所需的最小船数 。示例1:输入:people=[1,2],limit=......
  • Windows程序读取不了中文路径问题
    问题描述今天调试发现win32接口GetFileAttributesW居然不支持中文路径,于是寻找解决方案,找了半天,尝试用boost的fileystem库发现能用,而且boost能跨平台!不支持中文win32接口获取文件属性,当传入参数带有中文字符时,它获取的属性就会异常DWORDGetFileAttributesW([in]LPCWSTRlpFi......
  • 字符串处理,push pop路径,组合命令
     字符串处理字符串截取、命令嵌套命令格式:%变量名:~m,n%,其中,m表示开始位置(默认开头),n表示从m位置开始向后截取的字符个数(默认到结尾),若n为负数则表示向前截取个数,作用:将命令中的某段字符截取,通过call将字符做为命令执行。@echooffsetstr1=aaaechookbbbecho初始字符......
  • 力扣每日一题 6/9
    312.戳气球[困难]题目:有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i-1]*nums[i]*nums[i+1] 枚硬币。 这里的 i-1 和 i+1 代表和 i 相邻的两个......