力扣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的值,表示已经存储的节点值数量增加了1
    temp[cnt++] = root->val;

    // 判断当前节点是否为叶子节点,即左右子节点都为空
    if (root->left == NULL && root->right == NULL) {

        // 初始化用于记录已经写入路径字符串的字符长度为0
        int 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数组中的节点值的数量为0
    int cnt = 0;

    // 初始化用于记录已经存储到path数组中的路径数量为0
    int size = 0;

    // 调用dfs函数开始递归地构建从根节点到所有叶子节点的路径字符串,并将结果存储到path数组中
    dfs(path, temp, root, cnt, &size);

    // 通过returnSize指针返回存储到path数组中的路径数量
    *returnSize = size;

    // 返回存储路径字符串的二维字符数组指针,调用者可以通过这个指针访问路径字符串数组中的元素,记得在使用完后要释放内存
    return path;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业如何提高招聘能力?

企业如何提高招聘能力&#xff1f; 许多企业在进行招聘工作时&#xff0c;常常会遇到各种问题和挑战。尽管付出了大量的时间和精力&#xff0c;但结果却并不总是如人意。例如&#xff0c;企业可能会经历一次又一次的面试&#xff0c;却仍然找不到一个能够适应岗位要求的合适人…

JAVA:探索 EasyExcel 的技术指南

1、简述 在 Java 开发中&#xff0c;Excel 文件的读写操作是一项常见的需求。阿里巴巴开源的 EasyExcel 提供了一种高效、简洁的解决方案&#xff0c;特别是在处理大规模数据时表现尤为突出。本文将详细介绍 EasyExcel 的优缺点、应用场景&#xff0c;并通过实例展示其基本用法…

AI制作ppt

1&#xff0c;kimi&#xff1a; 实际上也是AiPPT.cn这个网站&#xff08;但是有实际次数限制&#xff09; 2&#xff0c;其余专业AI ppt生成网站&#xff1a; &#xff08;1&#xff09;gamma&#xff1a;https://gamma.app/ 大概能制作7~10页左右 free的ppt&#xff0c;其余要…

穿越数据迷宫:C++哈希表的奇幻旅程

文章目录 前言&#x1f4d4;一、unordered系列关联式容器&#x1f4d5;1.1 unordered 容器概述&#x1f4d5;1.2 哈希表在 unordered 容器中的实现原理&#x1f4d5;1.3 unordered 容器的特点 &#x1f4d4;二、unordered_set 和 unordered_map 的基本操作&#x1f4d5;2.1 un…

数据结构 -二叉搜索树

一.什么是二叉搜索树 树插入删除方便比线性数组 二.二叉搜索树的查找操作 尾递归可以用循环递归 三.二叉树的插入操作 35要挂在33上面必须记住33的位置 解决方法&#xff0c;要求递归函数返回一个 结点插到33的右子树 四.二叉搜索树的删除 要是删除的是叶子节点之间删除 只有一…

计算机三级 数据库技术

第一章 数据库应用系统开发方法 1.1 数据库应用系统生命周期 软件工程:软件工程的思想&#xff0c;即用工程的概念、原理、技术和方法对软件生产、开发的全过程进行跟踪和管理 软件开发方法:瀑布模型、快速原型模型、螺旋模型 DBAS生命周期模型 1.2 规划与分析 系统规划与定…

使用 AMD GPU 推理 Mixtral 8x22B

Inferencing with Mixtral 8x22B on AMD GPUs — ROCm Blogs 2024年5月1日&#xff0c;由 Clint Greene撰写。 简介 自从Mistral AI’s AI发布了Mixtral 8x7B以来&#xff0c;专家混合&#xff08;MoE&#xff09;在AI社区重新获得了关注。受此发展启发&#xff0c;多个AI公…

前后端、网关、协议方面补充

这里写目录标题 前后端接口文档简介前后端视角对于前端对于后端代码注册路由路由处理函数 关于httpGET/POST底层网络关于前端的获取 路由器网关路由器的IP简介公网IP(WAN IP)私网IP(LAN IP)无线网络IP(WIFI IP)查询路由器私网IP路由器公网IP LAN口与WIFI简介基本原理 手动配置电…

leetcode104:二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

大语言模型理论基础

文章目录 前言大语言模型必需知识概述大语言模型目标模型上下文神经网络的神经元常见激活函数SigmoidTanhRelusoftmax 通用近似定理多层感知机&#xff08;MLP&#xff09;拟合最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们接下来对大语言模型一探究竟&#xff0c;…

关于VUE NPM安装失败的问题

最近使用 npm install --registryhttps://registry.npmmirror.com 安装一个新项目的依赖&#xff0c;各种失败。 最后发现是package-lock里面有老的淘宝的域名&#xff0c;整体替换掉就行了

【数据结构】宜宾大学-计院-实验七

实验七 二叉树 一、实验目的&#xff1a;二、实验内容&#xff1a;三、实验结果&#xff1a;1,2&#xff1b;3,4,5;6.数组顺序存储的优缺点二叉链表存储的优缺点 一、实验目的&#xff1a; 掌握二叉树的顺序存储结构 掌握二叉树的链式存储结构 二、实验内容&#xff1a; 1&am…

游戏如何应对内存修改

据观察&#xff0c;近年来游戏黑灰产攻击角度多样化趋势显著&#xff0c;主要面临工作室、定制注入挂、模拟点击挂、内存修改挂、破解版等多方面安全问题。 据FairGuard数据统计&#xff0c;在游戏面临的众多安全风险中&#xff0c;「内存修改」攻击占比约为13%&#xff0c;主…

git重置的四种类型(Git Reset)

git区域概念 1.工作区:IDEA中红色显示文件为工作区中的文件 (还未使用git add命令加入暂存区) 2.暂存区:IDEA中绿色(本次还未提交的新增的文件显示为绿色)或者蓝色(本次修改的之前版本提交的文件但本次还未提交的文件显示为蓝色)显示的文件为暂存区中的文件&#xff08;使用了…

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;再其他节点下用户建本地表成功&#…

Exploring Defeasible Reasoning in Large Language Models: A Chain-of-Thought A

文章目录 题目摘要简介准备工作数据集生成方法实验结论 题目 探索大型语言模型中的可废止推理&#xff1a;思路链 论文地址&#xff1a;http://collegepublications.co.uk/downloads/LNGAI00004.pdf#page136 摘要 许多大型语言模型 (LLM) 经过大量高质量数据语料库的训练&…

应用程序部署(IIS的相关使用,sql server的相关使用)

数据服务程序&#xff08;API&#xff09;部署 1、修改配置文件 打开部署包中的web.config配置文件&#xff0c;确认数据库登录名和密码正确 修改ip为电脑IP&#xff08;winR输入cmd&#xff0c;输入ipconfig&#xff0c;IPv4对应的就是本机IP&#xff09; 2、打开IIS&#x…

RHCE-DNS域名解析服务器

一、DNS简介 DNS &#xff08; Domain Name System &#xff09;是互联网上的一项服务&#xff0c;它作为将域名和 IP 地址相互映射的一个分布式 数据库&#xff0c;能够使人更方便的访问互联网。 DNS 系统使用的是网络的查询&#xff0c;那么自然需要有监听的 port 。 DNS 使…

插入排序(sort)C++

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 时间限制&#xff1a;C/C/Rust/Pascal 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C/Rust/Pascal 512 M&#xff0c;其他语言1024 M 64bit IO Format: %lld 题目描述 插入排序是一种…

Vue2:脚手架 vue-cli

Vue2&#xff1a;脚手架 vue-cli 结构renderrefpropsmixinscoped 脚手架是Vue官方提供的Vue开发平台&#xff0c;.vue文件就需要通过脚手架来解析&#xff0c;所以对于单文件组件就依赖于脚手架。 安装&#xff1a; npm i -g vue/cli如果执行vue --version有输出&#xff0c;…