当前位置: 首页 > news >正文

力扣257:二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

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

 

示例 1:

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:

输入:root = [1]
输出:["1"]

代码:

/*** Definition for a binary树节点.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/// 定义一个常量NUM,用于表示一些数组的大小等相关操作,这里假设其值为100
#define NUM 100// 深度优先搜索函数,用于递归地遍历二叉树,构建从根节点到叶子节点的路径字符串,并将这些路径存储到path数组中
// path: 二维字符数组指针,用于存储从根节点到叶子节点的路径字符串
// temp: 字符数组,用于临时存储从根节点到当前节点的路径上的节点值(以字符形式)
// cnt: 表示当前已经存储到temp数组中的节点值的数量(索引)
// size: 指向一个整数的指针,用于记录已经存储到path数组中的路径数量,同时也作为下一个要存储路径的下标
void dfs(char **path, char *temp, struct TreeNode *root, int cnt, int *size)
{// 如果当前节点为空,说明已经遍历到树的底部或者传入的就是空树,直接返回,不进行后续操作if (root == NULL) {return;}// 将当前节点的值转换为字符形式并存储到temp数组中,然后更新cnt的值,表示已经存储的节点值数量增加了1temp[cnt++] = root->val;// 判断当前节点是否为叶子节点,即左右子节点都为空if (root->left == NULL && root->right == NULL) {// 初始化用于记录已经写入路径字符串的字符长度为0int len = 0;// 遍历temp数组中除了最后一个元素(因为最后一个元素是当前叶子节点的值,需要单独处理)之外的所有元素for (int i = 0; i < cnt - 1; i++) {// sprintf函数用于将格式化的数据写入字符串,它的返回值是写入的字符总数// &path[*size][len]表示获取path数组中第*size条路径字符串,并将指针移动到已经写入字符的末尾位置,以便后续继续拼接字符串// 将temp[i]的值格式化为字符串并拼接到path数组中第*size条路径字符串中,例如将整数3格式化为"3"然后拼接到路径字符串中len += sprintf(&path[*size][len], "%d->", temp[i]);}// 将当前叶子节点的值格式化为字符串并拼接到path数组中第*size条路径字符串的末尾,完成整个路径字符串的拼接sprintf(&path[*size][len], "%d", temp[cnt - 1]);// 更新已经存储到path数组中的路径数量,将*size的值加1,以便下一次存储路径时使用下一个下标*size += 1;// 完成当前叶子节点路径的构建和存储后,返回,继续处理其他节点return;}// 递归地调用dfs函数处理当前节点的左子节点,继续构建从根节点到左子树叶子节点的路径dfs(path, temp, root->left, cnt, size);// 递归地调用dfs函数处理当前节点的右子节点,继续构建从根节点到右子树叶子节点的路径dfs(path, temp, root->right, cnt, size);// 完成当前节点及其子节点的处理后,返回,继续处理其他节点return;
}/*** Note: The returned array must be malloced, assume caller calls free().*/// 函数binaryTreePaths用于获取二叉树从根节点到所有叶子节点的路径字符串数组
// root: 二叉树的根节点指针
// returnSize: 一个指针,用于返回路径字符串数组的大小(即存储了多少条路径字符串)
char ** binaryTreePaths(struct TreeNode* root, int* returnSize)
{// 为存储路径字符串的二维字符数组分配内存空间,假设最多有NUM条路径(根据前面定义的常量NUM)char **path = (char **)malloc(NUM * sizeof(char *));// 为二维字符数组中的每个指针所指向的字符数组分配内存空间,每个字符数组假设最多能容纳NUM个字符for (int i = 0; i < NUM; i++) {path[i] = (char *)malloc(NUM * sizeof(char));}// 定义一个字符数组temp,用于在dfs函数中临时存储从根节点到当前节点的路径上的节点值,假设最多能容纳NUM个字符char temp[NUM];// 初始化用于记录已经存储到temp数组中的节点值的数量为0int cnt = 0;// 初始化用于记录已经存储到path数组中的路径数量为0int size = 0;// 调用dfs函数开始递归地构建从根节点到所有叶子节点的路径字符串,并将结果存储到path数组中dfs(path, temp, root, cnt, &size);// 通过returnSize指针返回存储到path数组中的路径数量*returnSize = size;// 返回存储路径字符串的二维字符数组指针,调用者可以通过这个指针访问路径字符串数组中的元素,记得在使用完后要释放内存return path;
}

相关文章:

力扣257:二叉树的所有路径

给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","1->3"]示例…...

Tcl 和 Python 在二次开发研究

引言 Tcl(Tool Command Language)和 Python 都是广泛应用于各种领域的编程语言,特别是在二次开发和自动化开发方面,两者有着独特的特性。Tcl 是一种动态的脚本语言,早期主要用于集成和控制其他程序,因此它经常出现在嵌入式应用和图形用户界面(GUI)开发中。而 Python 是…...

【NLP优化】Ubuntu 20.04 下 源码安装 CasADi + Ipopt / acados

20241114 记录一下 Ubuntu 20.04 下安装 MPC 中两种常用开源 NLP 优化器 CasADi + Ipopt / acados 可以新建一个文件夹,保存所有源码安装下载的代码 mkdir ~/mpc_dep1. 安装依赖 # **IPOPT** sudo apt-get install gcc g++ gfortran git patch wget pkg-config libmetis-de…...

[241110] 微软发布多智能体系统Magentic-One | 社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5

目录 微软发布多智能体系统 Magentic-One社区讨论&#xff1a;Ubuntu 26.04 LTS 发布前移除 Qt 5 微软发布多智能体系统 Magentic-One 微软研究院近日发布了一个名为 Magentic-One 的多智能体系统&#xff0c;旨在解决复杂的现实世界任务。这个系统展现了令人兴奋的潜力&#…...

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前&#xff0c;5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力&#xff0c;进入5G发展的下半场&#xff0c;5G与AI的融合正推动诸多行业的数字化转型和创新发展&#xff0c;终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…...

MySQL查询执行(六):join查询

到底可不可以使用join 假设存在如下表结构&#xff1a; -- 创建表t2 CREATE TABLE t2 (id int(11) NOT NULL,a int(11) DEFAULT NULL,b int(11) DEFAULT NULL,PRIMARY KEY (id),KEY a (a) ) ENGINEInnoDB;-- 向t2写入1000条数据 drop procedure idata; delimiter ;; create pr…...

python习题练习

python习题 编写一个简单的工资管理程序系统可以管理以下四类人:工人(worker)、销售员(salesman)、经理(manager)、销售经理(salemanger)所有的员工都具有员工号&#xff0c;工资等属性&#xff0c;有设置姓名&#xff0c;获取姓名&#xff0c;获取员工号&#xff0c;计算工资等…...

MySQL高级(二):一条更新语句是如何执行的

执行步骤 1. 解析 SQL 语句 MySQL 首先会解析你输入的 UPDATE 语句。解析器会检查语法是否正确&#xff0c;并将 SQL 语句转化为内部的数据结构&#xff08;通常是语法树&#xff09;。 示例 SQL 语句&#xff1a; UPDATE employees SET salary 5000 WHERE department Sa…...

在 Ubuntu 18.04 中搭建和测试 DNS 服务器

在 Ubuntu 18.04 中搭建和测试 DNS 服务器可以通过安装和配置 BIND&#xff08;Berkeley Internet Name Domain&#xff09;来实现。以下是详细的步骤&#xff1a; 1. 安装 BIND 打开终端并运行以下命令来安装 BIND&#xff1a; sudo apt update sudo apt install bind9 bin…...

算法学习第一弹——C++基础

早上好啊&#xff0c;大佬们。来看看咱们这回学点啥&#xff0c;在前不久刚出完C语言写的PTA中L1的题目&#xff0c;想必大家都不过瘾&#xff0c;感觉那些题都不过如此&#xff0c;所以&#xff0c;为了我们能更好的去处理更难的题目&#xff0c;小白兔决定奋发图强&#xff0…...

javaWeb小白项目--学生宿舍管理系统

目录 一、检查并关闭占用端口的进程 二、修改 Tomcat 的端口配置 三、重新启动 Tomcat 一、javaw.exe的作用 二、结束javaw.exe任务的影响 三、如何判断是否可以结束 结尾&#xff1a; 这个错误提示表明在本地启动 Tomcat v9.0 服务器时遇到了问题&#xff0c;原因是所需…...

如何优化Elasticsearch的查询性能?

优化Elasticsearch查询性能可以从以下几个方面进行&#xff1a; 合理设计索引和分片&#xff1a; 确保设置合理的分片和副本数&#xff0c;考虑数据量、节点数和集群大小。根据数据量和节点数量调整分片数量&#xff0c;避免使用过多分片&#xff0c;因为每个分片都需要额外的…...

蓝桥杯每日真题 - 第12天

题目&#xff1a;&#xff08;数三角&#xff09; 题目描述&#xff08;14届 C&C B组E题&#xff09; 解题思路&#xff1a; 给定 n 个点的坐标&#xff0c;计算其中可以组成 等腰三角形 的三点组合数量。 核心条件&#xff1a;等腰三角形的定义是三角形的三条边中至少有…...

从H264视频中获取宽、高、帧率、比特率等属性信息

背景 最近整理视频编解码的代码&#xff0c;早前在jetson上封装了jetson multimedia作为视频编解码的类&#xff0c;供其他同事和其他组使用&#xff0c;但该解码接口有一个问题&#xff0c;无法首先获取视频宽高信息&#xff0c;更无法直接获取视频的帧率、比特率等信息。 解…...

Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件

前一篇文章中讲述了如何使用cyberchef提取HTTP/TLS数据包中的文件,详见《Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件》,链接这里,本文讲述下如何使用cyberchef提取FTP/TCP数据包中的文件。 FTP 是最为常见的文件传输协议,和HTTP协议不同的是FTP协议传输…...

Nginx中使用keepalive实现保持上游长连接实现提高吞吐量示例与测试

场景 HTTP1 .1之后协议支持持久连接&#xff0c;也就是长连接&#xff0c;优点在于在一个TCP连接上可以传送多个HTTP请求和响应&#xff0c; 减少了建立和关闭连接的消耗和延迟。 如果我们使用了nginx去作为反向代理或者负载均衡&#xff0c;从客户端过来的长连接请求就会被…...

深度学习-卷积神经网络CNN

案例-图像分类 网络结构: 卷积BN激活池化 数据集介绍 CIFAR-10数据集5万张训练图像、1万张测试图像、10个类别、每个类别有6k个图像&#xff0c;图像大小32323。下图列举了10个类&#xff0c;每一类随机展示了10张图片&#xff1a; 特征图计算 在卷积层和池化层结束后, 将特征…...

241114.学习日志——[CSDIY] [Cpp]零基础速成 [03]

​ CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff0…...

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合&#xff0c;AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革&#xff0c;在投入提升与政策扶植的双重作用下&#xff0c;以大模型技术为底座、结合专业化金融能力的金融大…...

数据库SQL——什么是实体-联系模型(E-R模型)?

目录 什么是实体-联系模型&#xff1f; 1.实体集 2.联系集 3.映射基数 一对一&#xff08;1:1&#xff09; 一对多&#xff08;1:n&#xff09; 多对一&#xff08;n:1&#xff09; 多对多&#xff08;m:n&#xff09; 全部参与&#xff1a; 4.主码 弱实体集&#xf…...

NCNN+OpenCV+Vulkan三件套:Windows环境下的深度学习加速实战教程

NCNNOpenCVVulkan三件套&#xff1a;Windows环境下的深度学习加速实战教程 在深度学习模型部署的战场上&#xff0c;Windows平台往往被开发者视为"次优选择"——直到NCNN、OpenCV和Vulkan这个黄金组合的出现。这个三件套解决方案正在改变游戏规则&#xff1a;NCNN提供…...

在ESP32上为LVGL 8.x添加中文输入法:从拼音到候选词显示的完整实现

在ESP32上为LVGL 8.x实现高性能中文输入法的工程实践 当我们在智能家居控制面板上输入Wi-Fi密码时&#xff0c;或者在工业HMI设备中输入参数时&#xff0c;中文输入往往成为嵌入式设备最令人头疼的用户体验瓶颈。ESP32作为物联网领域的主流芯片&#xff0c;其有限的RAM资源&…...

3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析

3个秘诀让城通网盘下载提速10倍&#xff1a;ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具&#xff0c;通过本地解析技术帮…...

基于ELK的口罩检测日志分析与可视化

基于ELK的口罩检测日志分析与可视化 1. 引言 在公共场所部署口罩检测系统后&#xff0c;我们面临着一个新的挑战&#xff1a;如何实时监控系统运行状态、快速定位问题、并优化检测性能&#xff1f;传统的日志查看方式已经无法满足需求&#xff0c;我们需要一个能够集中管理、…...

新手如何借助快马平台AI生成代码,轻松入门蓝桥杯经典题型

作为一个刚接触编程的新手&#xff0c;参加蓝桥杯这样的比赛可能会觉得无从下手。特别是看到题目要求实现算法时&#xff0c;往往不知道如何把问题拆解成代码。最近我发现用InsCode(快马)平台可以很好地解决这个问题&#xff0c;它能根据题目描述直接生成可运行的代码&#xff…...

5分钟部署阿里RexUniNLU:Web界面操作,无需编程基础

5分钟部署阿里RexUniNLU&#xff1a;Web界面操作&#xff0c;无需编程基础 1. 认识RexUniNLU&#xff1a;零样本理解的神器 想象一下&#xff0c;你刚接手一个新项目&#xff0c;老板丢给你一堆用户评论&#xff0c;要求你快速分析出大家对产品"屏幕"、"续航&…...

Word文档自动更新日期技巧

设置Word文档自动显示当天日期打开Word文档后&#xff0c;可以通过插入日期字段实现每次打开时自动更新为当天日期。方法1&#xff1a;使用日期字段在Word文档中定位光标到需要显示日期的位置。点击菜单栏"插入"→"文本"→"日期和时间"。在弹出的…...

TDengine IDMP 工业数据建模 —— 数据标准化

3.4 数据标准化 工业环境通常从多个数据源采集数据&#xff0c;这些数据往往命名不一致、物理单位各异、数据结构不同。如果没有标准化&#xff0c;跨资产分析、AI 生成洞察和数据汇聚将变得不可靠甚至无法实现。TDengine IDMP 提供了多种机制&#xff0c;对整个资产模型中的数…...

Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程

Graphormer在计算毒理学中的应用&#xff1a;预测hERG通道抑制活性的完整建模流程 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...

伯克利Octo机器人框架实战:5步搞定跨平台任务迁移(附代码)

伯克利Octo机器人框架实战&#xff1a;5步搞定跨平台任务迁移&#xff08;附代码&#xff09; 在机器人开发领域&#xff0c;硬件平台的多样性一直是阻碍算法快速部署的主要瓶颈。想象一下&#xff0c;你花费数月为WidowX机械臂开发的抓取算法&#xff0c;当实验室新购入UR5工业…...