Leetcode每日一题

https://leetcode.cn/problems/binary-tree-preorder-traversal/

这道题目需要我们自行进行创建一个数组,题目也给出我们需要自己malloc一个数组来存放,这样能达到我们遍历的效果,我们来看看他的接口函数给的是什么。

可以看到的是这个接口函数给了一个root就是根节点的意思,但是这里的returnsize是什么意思可能有问题?  

其实returnsize这里虽然给的是指针,是因为我们函数栈帧创建和销毁的时候,形参只是实参的一份临时拷贝,这样的话,我们就算给returnsize赋值进行改变,也不能改变他的值

这里的returnsize是我们需要在这个函数外面统计数组的个数

我们来看这个题目的第一个问题就是我们要开辟一个数组,开辟数组的话我们是不是得知道这个数组空间有多大才行,所以我们得先写一个函数就是统计节点的函数,那这个函数其实就是遍历数组,用的就是递归的方式进行遍历。

int BinaryTreeSize(struct TreeNode* root)
{if(root == NULL){return 0;}return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;
}

这个就是我们来统计有多少节点的函数,思想就是我们遇到空的时候就返回,不是空的时候就是得返回一个节点。下面我们就只需要在题目给的接口函数进行调用,然后malloc一个数组出来就行。

int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n = BinaryTreeSize(root);int* arry = (int*)malloc(sizeof(int)*n);assert(arry);int size = 0;_preorderTraversal(root, arry, &size);*returnSize = n;return arry;}

然后我们需要做的就是实现我们遍历函数的内容,其实很简单,因为前序遍历的时候是先中间节点,然后是他的左孩子和右孩子,所以我们的递归方法就出来了。

void _preorderTraversal(struct TreeNode* root, int* a,int* pi)
{if(root == NULL){return ;}a[(*pi)++] = root->val;_preorderTraversal(root->left, a, pi);_preorderTraversal(root->right, a, pi);}

这里需要注意的地方就是pi这个值我们是需要取出他的地址进行,因为如果不是地址的话,我们每次函数递归的时候建立函数栈帧的时候就是会有问题,每次都是局部变量,所以我们得用他的地址,这个也就是为什么我们的size是取地址传进来的,而不是直接传0,因为传0的话,形参只是实参的一份临时拷贝,改变形参并不会对实参有任何的影响。

谢谢大家观看,我们下次再见。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记本电脑word打字延迟特别大,但是浏览器中打字没有延迟,如何解决这个问题。

问题描述: 笔记本电脑word打字延迟特别大,但是浏览器中打字没有延迟,如何解决这个问题。(之前以为是自己的电脑用了6年,用的时间久了,硬件老化导致的,本来想直接换电脑的,但是想着去…

C语言指针基础题(一)

目录 例题一题目解析答案 例题二题目解析答案 例题三题目解析答案 例题四题目解析答案 例题五题目解析答案 例题六题目解析答案 例题七题目解析答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 &#x…

简易加减运算器的制作----数字电路设计(含proteus仿真)

简易加减运算器的制作 一、功能要求—基本功能 1、自制0-9按键,在一个LED数码管上稳定地显示当前按下的值。(基本功能) 2、增加、两个按键,实现0-9两个一位数的加法运算,同时在两位LED上稳定地显示运算结果。&#…

SAP UI5 walkthrough step3 Controls

在上一步&#xff0c;我们是直接用index.html 中的body 里面的DIVision去输出 hello world&#xff0c; 在这个章节&#xff0c;我们将用SAP UI5 的标准控件 sap/m/Text 首先&#xff0c;我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…

思科最新版Cisco Packet Tracer 8.2.1安装

思科最新版Cisco Packet Tracer 8.2.1安装 一. 注册并登录CISCO账号二. 下载 Cisco Packet Tracer 8.2.1三. 安装四. 汉化五. cisco packet tracer教学文档六. 正常使用图 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新…

2023 CCF中国软件大会(CCF ChinaSoft)“新兴系统软件论坛” 成功召开

2023年12月1日上午&#xff0c;2023年度CCF中国软件大会新兴系统软件论坛成功召开。新兴系统软件论坛针对人机物融合、云边端协作、大数据、智能化等复杂的应用场景&#xff0c;以新兴软件理论、模型、平台和产业化等为议题&#xff0c;旨在为政府主管部门、学术界和产业界搭建…

书籍推荐: 深入理解Go并发编程

一书在手&#xff0c;并发无忧 收到了鸟窝老师历时五载写就的新作「深入理解Go并发编程」 迫不及待开卷阅览&#xff0c;大呼过瘾&#xff0c;最大感触是诚如副标题所言&#xff0c;“从原理到实践&#xff0c;看这本就够了”。 对并发编程优雅简洁的支持&#xff0c;是Go最大的…

045:Vue读取本地上传JSON文件,导出JSON文件方法

第045个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

shiro反序列化漏洞复现

shiro反序列化漏洞复现 版本 550 仅需要一个url 721 需要一个账号 安装环境 先配置国内源 安装docker apt-get install docker 安装docker-compose apt-get install docker-compose 拉取镜像 docker pull medicean/vulapps:s_shiro_1 启动docker service docker star…

C语言之函数设计(1)

目录 没有返回值的函数 通用性 不含形参的函数 函数返回值的初始化 作用域 文件作用域 声明和定义 函数原型声明 头文件和文件包含指令 在上节中我们简单的学习了函数的创建方法&#xff08;函数定义&#xff09;与函数的使用方法&#xff08;函数调用&#xff09;&…

道路基础设施三维数字化及GIS平台建设方案

目录 1.应用背景2.三维移动测量系统2.1 车载三维移动测量系统2.2 无人机倾斜摄影系统2.3 地面激光采集系统 3.多源数据三维融合处理4.道路设施专题信息提取与分析4.1 路产三维地理信息4.2 高精度导航地图4.3 路面病害检测4.4 隧道形变分析 5. 三维全要素模型建模5.1 道路5.2 桥…

安卓拍照扫描APP解决方案——基于深度学习与NDK实现文档图像版面检测与分析

一、概述 文档版面分析是针对图片或页面扫描图像上感兴趣的区域进行定位和分类的过程。其主要目标在于让机器能够理解文档结构&#xff0c;即将文档图像划分为不同类型内容的区域&#xff0c;并分析这些区域之间的关系。这是进行内容识别之前的关键步骤&#xff0c;它通常可以…