【牛客刷题-算法】NC9 二叉树中和为某一值的路径(一)

简介: 【牛客刷题-算法】NC9 二叉树中和为某一值的路径(一)

1.题目描述


描述

给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。


该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点

叶子节点是指没有子节点的节点

路径只能从父节点到子节点,不能从子节点到父节点

总节点数目为n

例如:

给出如下的二叉树,s u m = 22 sum=22sum=22,

image.png


返回true,因为存在一条路径 5 → 4 → 11 → 2 5\to 4\to 11\to 25→4→11→2的节点值之和为 22。


数据范围:

1.树上的节点数满足 0 ≤ n ≤ 10000 0 \le n \le 100000≤n≤10000

2.每个节点的值都满足∣ v a l ∣ ≤ 1000 |val| \le 1000∣val∣≤1000

要求:空间复杂度 O ( n ) O ( n ) O(n)O(n)O(n)O(n),时间复杂度O ( n ) O ( n ) O(n)O(n)O(n)O(n)

进阶:空间复杂度 O ( 树的高度 ) O ( 树的高度 ) O(树的高度)O(树的高度)O(树的高度)O(树的高度),时间复杂度 O ( n ) O ( n ) O(n)O(n)O(n)O(n)


2.算法设计思路


核心其实就是一个二叉树的遍历。可以采用回溯法,在遍历树的过程中,利用一个全局变量num记录遍历到当前节点时路径上所有值的和。


当以当前结点为根的子二叉树中没有符合要求的叶子结点时,就向上回溯(从父结点到子结点时,num的值增加了;因此返回时就减去相应的值。)


3.代码实现


注:这里并不是完整代码,而只是核心代码的模式


/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @param sum int整型 
 * @return bool布尔型
 */
int num = 0;
bool hasPathSum(struct TreeNode* root, int sum ) {
    // write code here
    bool flag = false;
    if(root == NULL){return false;}
    num += root->val;
    //printf("num:%d\n", num);
    if(num == sum && root->left == NULL && root->right == NULL){return true;}
  //查找左右子树
    if(hasPathSum(root->left, sum) == true){return true;}
    else {flag = true;}
    if(hasPathSum(root->right, sum) == true){return true;}
    else {flag = true;}
  //回溯
    if(flag == true){
        num -= root->val;
        return false;
    }
  //最后不加个返回,就会显示编译错误。其实前面逻辑上是一定会有返回值的
    printf("error\n");
    return false;
}

当没有最后一行代码return false;时,就会显示如下的编译错误,避坑(代码其实应该是没有问题的)。


image.png


4.运行结果


成功通过!

image.png

相关文章
|
3天前
|
存储 算法 IDE
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
14 1
|
3天前
|
算法
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(下)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
7 1
|
3天前
|
算法 C++
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(上)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
7 1
|
3天前
|
机器学习/深度学习 算法 分布式数据库
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码(下)
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码
10 1
|
3天前
|
算法
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码(上)
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码
11 1
|
3天前
|
存储 移动开发 算法
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构(下)
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构
12 0
|
3天前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构(上)
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构
9 0
|
8天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
1天前
|
机器学习/深度学习 算法
基于BP神经网络的QPSK解调算法matlab性能仿真
该文介绍了使用MATLAB2022a实现的QPSK信号BP神经网络解调算法。QPSK调制信号在复杂信道环境下受到干扰,BP网络能适应性地补偿失真,降低误码率。核心程序涉及数据分割、网络训练及性能评估,最终通过星座图和误码率曲线展示结果。
|
1天前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真
该内容是一个关于基于YOLOv2的鱼眼镜头人员检测算法的介绍。展示了算法运行的三张效果图,使用的是matlab2022a软件。YOLOv2模型结合鱼眼镜头畸变校正技术,对鱼眼图像中的人员进行准确检测。算法流程包括图像预处理、网络前向传播、边界框预测与分类及后处理。核心程序段加载预训练的YOLOv2检测器,遍历并处理图像,检测到的目标用矩形标注显示。