【C语言题解】 | 144. 二叉树的前序遍历

144. 二叉树的前序遍历

  • 144. 二叉树的前序遍历
  • 代码

144. 二叉树的前序遍历

在这里插入图片描述

提示:

  1. 树中节点数目在范围 [0, 100] 内

函数原型:

int* preorderTraversal(struct TreeNode* root, int* returnSize) {

首先先观察一下这个函数原型,TreeNode* root 为形参,传入根节点,int* returnSize为形参,在函数调用时用于返回改题目所求数组的长度,因为由于C语言的局限,只能返回一个参数,所以采用这种通过传入指针的形参,来改变函数外部实参的方法。

题目要求给一个二叉树的根节点,返回其前序遍历的数组。

首先先计算二叉树的节点个数,用于后续的数组空间申请。

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

然后先序遍历,写入数组:

因为根据上述代码,求得节点个数为n,则该数组一共有n个空间,控制写入数组的下标需要传入int* ,因为若直接传入int,形参的改变不影响实参的改变。

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

使用malloc函数构建数组,返回数组。

int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n = TreeSize(root);int* a = (int*)malloc(sizeof(int)*n);*returnSize = n;int* i = 0;preorder(root,a,&i);return a;
}

代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/int TreeSize(struct TreeNode* root){return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;}
void preorder (struct TreeNode* root, int* a,int* pi)
{if(root == NULL)return ;a[(*pi)++] = root->val;preorder(root->left,a,pi);preorder(root->right,a,pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n = TreeSize(root);int* a = (int*)malloc(sizeof(int)*n);*returnSize = n;int* i = 0;preorder(root,a,&i);return a;
}

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

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

相关文章

亿胜盈科HT4822 160mW免输出电容立体声耳机放大器

HT4822是一款无需输出隔直电容的立体声耳机放大器。支持差分和单端的模拟信号输入。 在3.6V供电下,THDN 1%,32ohm负载时能提供80mW的输出。其具有低至0.007%的THDN。 HT4822能在2.5V-6.0V电源条件下工作,具有过热保护和欠压保护等功能。 …

C语言与lua通过json对象交互

C语言调用Lua,传递一个JSON字符串,并将其解析为table,并返回一个JSON串给C语言。 在使用C语言调用Lua的过程中,有时需要向Lua传递一些数据,并从Lua接收返回结果。为了实现这个功能,我们可以借助第三方库&a…

记录一次数据中包含转义字符\引发的bug

后端返回给前端的数据是: { "bizObj": { "current": 1, "orders": [ ], "pages": 2, "records": [ { "from": "1d85b8a4bd33aaf99adc2e71ef02960e", …

deepin安装protobuf(3.22前版本可以使用此方法安装)

deepin安装protobuf 下载protobuf编译安装 下载protobuf protobuf版本:https://github.com/protocolbuffers/protobuf/releases 选择你要下载的版本我这里使用的是这个URL:https://github.com/protocolbuffers/protobuf/releases/v21.12 点击下载的版…

多协议数据库Navicat Premium中文

Navicat Premium是一款强大的数据库管理和开发工具,支持多种数据库系统,如MySQL、Oracle、SQL Server、PostgreSQL等。它提供了一个直观的图形用户界面,使开发者可以轻松地创建、管理和维护数据库。Navicat Premium具有强大的数据建模、查询、…

java JDBC 连接数据库(增删查改)

必须先插入工具包 代码 public static void main(String[] args) {DataSource ds JdbcHelper.getDs();System.out.println(ds);JdbcTemplate jdbcTemplatenew JdbcTemplate(ds);System.out.println(jdbcTemplate);//新增String sql1"insert into biao values(null,?,?,…

高阶智驾,开打「硬核」战

一直以来,高阶智驾的「规模化普及」何时到来,硬件的「军备竞赛」和系统「降本增效」长期处于博弈状态。 其中,作为关键环节之一,传感器配置以及相应的感知算法技术迭代升级是最具看点的部分。以特斯拉、百度Apollo为代表的纯视觉技…

C++ 点云模型mesh PLY格式转成点云PCD格式

目录 一、代码示例二、结果示例适用:点云模型数据转成点云数据(即:PLY格式转PCD格式,STL格式转pcd格式) 一、代码示例 #include <iostream> #include <pcl/io/io.h> #include <pcl/io/vtk_lib_io.h>

初识Ubuntu

其实还是linux操作系统 命令都一样 但是在学习初级阶段&#xff0c;我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户&#xff0c;在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…

【GO语言依赖】Go语言依赖管理简述

在运行环境中&#xff0c;遭遇报错&#xff0c;显示找不到函数 经过研究后发现需要进行依赖管理&#xff0c;进行如下操作后解决&#xff1a; 起源 最早的时候&#xff0c;Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如…

轴承滚珠故障的理论推导与计算(修订中...)

1.缘起 轴承故障故障位置在高频&#xff0c;如果不即时处理&#xff0c;恶化后&#xff0c;滚珠会有单颗故障迅速恶化到多颗&#xff0c;如果此时电机承载较大负载&#xff0c;轴承的恶化&#xff0c;会牵连到相关的动力轴。是一个不可不进行监测的项目。 2.频谱特征 轴承的…

VF04写入表VKDFS增强

需求&#xff1a;FPLT表中&#xff0c;存在部分期初出具发票计划数据&#xff0c;需要排除掉&#xff0c;不参与VF04后续运算 实现&#xff1a;跟程序发现调用位置LV05IFAP->AP_01 在调用的时候&#xff0c;满足条件&#xff0c;进入form&#xff1a;index_vkdfs_aufbauen参…

安卓之缓存的应用场景以及各种技术优劣分析

文章摘要 本文主要探讨了安卓开发中的缓存技术及其应用场景&#xff0c;通过分析几种常见的缓存技术&#xff0c;包括内存缓存、磁盘缓存和网络缓存&#xff0c;阐述了它们的优点和缺点。此外&#xff0c;本文还提供了相应的代码示例&#xff0c;以帮助读者更好地理解这些缓存技…

Prepar3D设置全屏显示设置方法

一、 基础设置 当视景软件显示的屏幕超过一个的时候&#xff0c;需要将多个显示屏幕在设置->屏幕设置->多显示器这里设置为扩展这些显示器。 二、全屏方法说明 一般情况只需要设置了多屏显示扩展并设置了P3D软件全屏设置&#xff08;即下面的步骤一&#xff09;保存后…

Flink maven日志配置

Flink maven日志配置 maven 配置 <slf4j.version>1.7.30</slf4j.version> <!-- 引入日志管理相关依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</…

网页设计达人的首选!这6款顶级工具助你设计完美网页!

即时设计 即时设计是国内为当地设计师量身定制的完全免费的网页设计工具。是集成原型、设计、交互、交付等所有网页设计需求的一站式设计平台。内部集成了大量优秀的插件&#xff0c;包括组件、图标、字体、色板、填充等功能&#xff0c;基本涵盖了网页设计师常用的大部分工具…

uniapp写安卓端app自动更新下载apk安装

需要后端返回一个接口&#xff0c;接口里有最新版本号和下载地址&#xff0c;通过对比当前版本号和最新版本号来控制下载和安装最新版本 //获取当前版本 AndroidCheckUpdate() {const systemInfo uni.getSystemInfoSync();this.version Number(systemInfo.appVersion.split(…

Android studio调试

Android Studio连接手机详细教程(包含遇到的问题集)_android studio 连接手机-CSDN博客 可以创建虚拟机或直连真机或直连模拟器。 无法打开本地终端 Android studio Failed to start [powershell.exe] 利用Android studio的adb命令删除app应用 - 简书 利用ADB工具免root停用A…

CSAPP cache lab - Optimizing Matrix Transpose

CSAPP cache lab part B 矩阵转置 矩阵转置是一种操作&#xff0c;它将矩阵的行和列互换位置&#xff0c;即将原始矩阵的行变为转置矩阵的列&#xff0c;将原始矩阵的列变为转置矩阵的行。转置操作可以通过改变矩阵的布局来方便地进行某些计算和分析。 假设有一个mn的矩阵A&…

Java入门高频考查基础知识2(超详细28题2.5万字答案)

Java 是一种广泛使用的面向对象编程语言&#xff0c;在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性&#xff0c;适用于多种应用场景&#xff0c;包括企业应用、移动应用、嵌入式系统等。 以下是 Java 基础知识的一个概览&#xff1a; 1. 语法和基本概念&…