剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

2023-12-17

剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

题目来源: 47. 二叉树中和为某一值的路径

解法1:深度优先搜索

从根节点开始深度优先搜索:

  1. 当搜索到空节点时,直接返回;
  2. 当 path 中所有元素的和已经超过 sum 时,说明该路径不行,直接返回;
  3. 当搜索到叶子节点时,如果数组 path 中所有元素的和 + 叶子节点的值等于目标和 sum 时,说明我们找到了一条和为 sum 的路径,将叶子节点值插入 path,再将 path 插入答案 paths 中;
  4. 将当前节点值插入数组 path,向左右子树分别继续深度优先搜索。

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution
{
private:
    vector<vector<int>> paths;
public:
    vector<vector<int>> findPath(TreeNode *root, int sum)
    {
        if (root == nullptr)
            return {};
        vector<int> path;
        dfs(root, paths, path, sum);
        return paths;
    }
    void dfs(TreeNode *root, vector<vector<int>> &paths, vector<int> path, int sum)
    {
        if (root == nullptr)
            return;
        if (accumulate(path.begin(), path.end(), 0) > sum)
            return;
        if (root->left == nullptr && root->right == nullptr)
            if (accumulate(path.begin(), path.end(), 0) + root->val == sum)
            {
                path.push_back(root->val);
                paths.push_back(path);
                return;
            }
        path.push_back(root->val);
        if (root->left)
            dfs(root->left, paths, path, sum);
        if (root->right)
            dfs(root->right, paths, path, sum);
    }
};

复杂度分析:

时间复杂度:O()

空间复杂度:O()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径 的相关文章

随机推荐

  • 代码随想录算法训练营Day3 | 203.移除链表元素、707.设计链表、59.螺旋矩阵II

    LeetCode 203 移除链表元素 本题思路 就是常规的移除链表中的元素的操作 需要注意的点 头节点 head val val 的情况的处理 如果 head val val 就要继续往后 head head next 因此我们要遍历到第
  • 最强姿态模型 mmpose 使用实例

    mmpose 介绍 https blog csdn net jacke121 article details 135040186 图片姿态实例 本机地址 B project pose mmpose dev 1 x Copyright c O
  • Arrays.asList()方法:陷阱与解决之道

    在Java编程中 Arrays类提供了一系列用于操作数组的实用方法 其中 Arrays asList 方法是一个常用的方法 用于快速将数组转换为List集合 然而 这个方法存在一些潜在的陷阱 可能导致出现意外的行为 本文将介绍 Arrays
  • DSP捕获输入简单笔记

    程序 cap c Created on 2023年12月16日 Author My PC include cap h void cap init EALLOW SysCtrlRegs PCLKCR3 bit GPIOINENCLK 1 gp
  • 蓝禾2024届秋招/校招内推信息/内推码

    公司名称 蓝禾 内推码 SQDPVPM 内推来源 内推鸭小程序 官方招聘网站 https lanhevip jobs feishu cn index m position external referral code SQDPVPM
  • 007 Windows组策略

    组策略的应用 1 基本概念 组策略是一组策略的集合 组策略 英语 Group Policy 是 微软 Windows NT 家族操作系统的一个特性 它可以控制 用户帐户 和计算机帐户的工作环境 组策略提供了操作系统 应用程序 和 活动目录
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • mmpose 使用笔记

    目录 自己整理的可以跑通的代码 图片demo 检测加关键点 自己整理的可以跑通的代码 最强姿态模型 mmpose 使用实例 CSDN博客 图片demo python demo image demo py tests data coco 00
  • 2023“楚怡杯”湖南省赛“信息安全管理与评估“--数字取证调查(高职组)

    2023 楚怡杯 湖南省 信息安全管理与评估 高职组 任务书 2023 楚怡杯 湖南省 信息安全管理与评估 高职组 任务书 第一阶段竞赛项目试题 第二阶段竞赛项目试题 第二部分 数字取证调查 需
  • python快速实现简单的图片透明化

    整张图片透明化的完整代码如下 import os import glob from PIL import Image def convert to transparent image path output folder image Ima
  • Llama 架构分析

    从代码角度进行Llama 架构分析 Llama 架构分析 前言 Llama 架构分析 分词 网络主干 DecoderLayer
  • 牛客小白月赛83 解题报告

    题目链接 https ac nowcoder com acm contest 72041 question A题 解题思路 签到 代码 include
  • OSG中几何体的绘制(二)

    5 几何体操作 在本章的前言中就讲到 场景都是由基本的绘图基元构成的 基本的绘图基元构成简单的几何体 简单的几何体构成复杂的几何体 复杂的几何体最终构造成复杂的场景 当多个几何体组合时 可能存在多种降低场景渲染效率的原因 在很多3D引擎中
  • 中文星期几&十二时辰

    输入年月日输出中文星期败 输入时间字符串 输出十二时辰 笔记模板由python脚本于2023年12月16日 23 39 04创建 本篇笔记适合 熟悉python字符串类型str 并可以熟练应用 的coder翻阅 学习的细节是欢悦的历程 Py
  • 时序预测 | Python实现GRU电力需求预测

    时序预测 Python实现GRU电力需求预测 目录 时序预测 Python实现GRU电力需求预测 预测效果 基本描述 程序设计 参考资料
  • 软件工程期末复习+数据仓库ETL

    一 软件工程 请用基本路径测试方法为下列程序设计测试用例 并写明中间过程 第1步 画出流程图 1 菱形用于条件判断 用在有分支的地方 2 矩形表示一个基本操作 3 圆形是连接点 第2步 计算程序环路复杂性 流图G的环路复杂度V G 定义为
  • 十七、如何将MapReduce程序提交到YARN运行

    1 启动某个节点的某一个用户 hadoop node1 jps 13025 Jps hadoop node1 yarn daemon start resourcemanager hadoop node1 jps 13170 Resource
  • ES6 面试题 | 14.精选 ES6 面试题

    前端开发工程师 主业 技术博主 副业 已过CET6 阿珊和她的猫 CSDN个人主页 牛客高级专题作者 在牛客打造高质量专栏 前端面试必备 蓝桥云课签约作者 已在蓝桥云课上架的前后端实战课程 Vue js 和 Egg js 开发企业级健康管理
  • 你好,C++(3)2.1 一个C++程序的自白

    第2部分 与C 第一次亲密接触 在浏览了C 三分天下 的世界版图之后 便对C 有了基本的了解 算是一只脚跨入了C 世界的大门 那么 怎样将我们的另外一只脚也跨入C 世界的大门呢 是该即刻开始编写C 程序 还是 正在我们犹豫的时候 便看到前面
  • 剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

    剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 解法1 深度优先搜索 剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 题目来源 47 二叉