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.mzph.cn/news/212502.shtml

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

相关文章

说说webpack中常见的loader?解决了什么问题?

在Webpack中,Loader是用于处理各种文件类型的模块加载器,它们用于对文件进行转换、处理和加载。常见的Loader解决了以下问题: 处理 JavaScript 文件:Babel Loader用于将最新的JavaScript语法转译为浏览器兼容的版本,以…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本课目标(Objective) 掌握CSS三大特性理解什么是盒子模型掌握内边距padding的用法掌握外边距margin的用法 1. CSS的层叠,继承,优先级 1.1 CSS层叠 层叠:是指多个CSS样式叠加到同一个元…

Web(8)SQL注入

Web网站(对外门户) 原理:not>and>or(优先级) 一.低级注入 order by的作用是对字段进行排序,如order by 5,根据第五个字段 进行排序,如果一共有4个字段,输入order by 5系统就会报错不 …

详细介绍开源固件-TF-A

什么是TF-A? TF-A(Trusted Firmware-A)是一种用于嵌入式系统的开源固件,而不是Linux的一部分。TF-A主要用于ARM架构的处理器和设备,它提供了一组安全和可信任的软件组件,用于引导和初始化系统。 如下是其…

GD32F30X-RT-Thread学习-线程管理

1. 软硬件平台 GD32F307E-START Board开发板MDK-ARM Keil 2.RT-Thread Nano 3.RT-Thread 内核学习-线程管理 ​ 在多线程操作系统中,可以把一个复杂的应用分解成多个小的、可调度的、序列化的程序单元,当合理地划分任务并正确地执行时,这…

qt可以详细写的项目或技术

1.QT 图形视图框架 2.QT 模型视图结构 3.QT列表显示大量信息 4.QT播放器 5.QT 编解码 6.QT opencv

Linux--RedHat--安装和配置C++环境

百度下载,安装包: 链接:https://pan.baidu.com/s/1IgBfCCRxGYZ_PPiedad0xQ 提取码:ffff 下载后,建个目录,先解压好安装包! (两种方法)执行如下命令: 参考…

Bypass open_basedir

讲解 open_basedir是php.ini中的一个配置选项,可用于将用户访问文件的活动范围限制在指定的区域。 假设open_basedir/var/www/html/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/var/www/html/web1/和/tmp/这两个目录以外的文件。…

Java——面试:String 和 StringBuffer 的区别?

相同点: String 和 StringBuffer,它们可以储存和操作字符串, 即包含多个字符的字符数据。 String 和 StringBuffer 的区别有以下几点: 1.String 类提供了数值不可改变的字符串。而 StringBuffer 类提供的字符串进行修改。 当你知…

洛谷 P8674 [蓝桥杯 2018 国 B] 调手表

文章目录 [蓝桥杯 2018 国 B] 调手表题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题意解析CODE分析一下复杂度 [蓝桥杯 2018 国 B] 调手表 题目描述 小明买了块高端大气上档次的电子手表,他正准备调时间呢。 在 M78 星云,时间的计量…

JVM虚拟机:命令行查看JVM垃圾回收器的执行信息

在eclipse中打开命令行窗口 window->show view->Terminal 这样就打开了Terminal窗口,效果如下所示: java -XX:PrintCommandLineFlags -version 这个命令可以查看一些配置信息,其中最重要的配置信息就是,当前使用的G1回收器…

什么是漏洞扫描

漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测的 行为,也是一类重要的网络安全技术。它和防火墙、入侵检测系统互相配合,能够有效提高网络的安全性…

键盘打字盲打练习系列之成为大师——5

一.欢迎来到我的酒馆 盲打,成为大师! 目录 一.欢迎来到我的酒馆二.关于盲打你需要知道三.值得收藏的练习打字网站 二.关于盲打你需要知道 盲打系列教程,终于写到终章了。。。一开始在看网上视频,看到up主熟练的打字技巧&#xff…

LabVIEW与Tektronix示波器实现电源测试自动化

LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域,自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix MDO MSO DPO2000/3000/4000系列示波器,开发一个自动化测试项目。该项目旨在自动…

javascript中Reflect是什么?三分钟初识

目录 1. Reflect是什么?2. 为什么会出现Reflect?3. 需要怎么去使用Reflect?4. 最终的结果解决什么?5. 使用的注意点6. 常用的技巧 Reflect是Javascript中的一个内置对象,它提供了一组用于操作对象的方法,可…

Spring - BeanFactory和FactoryBean的理解

BeanFactory是什么? BeanFactory是Spring 容器的根接口,它是IOC的基本容器,负责管理和加载Bean,它为具体的IOC容器提供了最基本的规范,比如DefaultListableBeanFactory和ConfigurableBeanFactory,BeanFact…

《C++新经典设计模式》之第17章 中介者模式

《C新经典设计模式》之第17章 中介者模式 中介者模式.cpp 中介者模式.cpp #include <iostream> #include <map> #include <memory> using namespace std;// 中介者封装一系列的对象交互 // 4种角色 // Mediator&#xff08;抽象中介者类&#xff09;&#x…

MYSQL练题笔记-高级查询和连接-指定日期的产品价格

这依旧是中等题&#xff0c;想了好久&#xff0c;终于理解了很开心&#xff01; 一、题目相关内容 1&#xff09;相关的表和题目 2&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 题目是找出2019-08-16 时全部产品的价格&#xff0c;所以…

数字化时代的到来,IT运维产业正在发生深刻的变革

IT运维产业是随着信息技术的发展而产生的&#xff0c;它涵盖了从硬件到软件、从应用到数据、从终端到云端等各个方面的维护和管理。随着数字化时代的到来&#xff0c;IT运维产业正在发生深刻的变革。其中&#xff0c;大数据技术的广泛应用和数据资源的日益丰富&#xff0c;正在…

使用最小花费爬楼梯

1.状态表示 2.状态转移方程 3.初始化 保证填表时&#xff0c; 不越界 4.填表顺序 从左往右 5.返回值 解法2&#xff1a; 1.状态表示 2.状态转移方程 3.初始化 4.填表 从右往左 5.返回值 min( dp[0] , dp[1] ) ----------------------------------------------------…