数据结构 ——— 链式二叉树oj题:将链式二叉树的前序遍历存放在数组中

题目要求

给你二叉树的根节点 root ,返回它节点值的 前序 遍历


手搓一个链式二叉树

代码演示:

// 数据类型
typedef int BTDataType;// 二叉树节点的结构
typedef struct BinaryTreeNode
{BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向左子树的指针struct BinaryTreeNode* right; //指向右子树的指针
}BTNode;// 申请新节点
BTNode* BuyNode(BTDataType x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));// 判断是否申请成功if (newnode == NULL){perror("malloc fail");return NULL;}// 初始化newnode->data = x;newnode->left = NULL;newnode->right = NULL;return newnode;
}// 手搓一个链式二叉树
BTNode* CreatBinaryTree1()
{BTNode* n1 = BuyNode(1);assert(n1);BTNode* n2 = BuyNode(2);assert(n2);BTNode* n3 = BuyNode(3);assert(n3);BTNode* n4 = BuyNode(4);assert(n4);BTNode* n5 = BuyNode(5);assert(n5);BTNode* n6 = BuyNode(6);assert(n6);n1->left = n2;n1->right = n4;n2->left = n3;n4->left = n5;n4->right = n6;return n1;
}

代码实现

代码演示:

// 节点总个数
int BTreeSize(BTNode* root)
{if (root == NULL)return 0;return BTreeSize(root->left) + BTreeSize(root->right) + 1;
}// 前序递归遍历,存入a数组
void _preorderTraversal(BTNode* root, int* a, int* pi)
{if (root == NULL)return;// 根 -> 左子树 -> 右子树a[(*pi)++] = root->data;_preorderTraversal(root->left, a, pi);_preorderTraversal(root->right, a, pi);
}// 确定returnSize的大小,定义a数组
int* preorderTraversal(BTNode* root, int* returnSize)
{// 求出节点总个数*returnSize = BTreeSize(root);// 动态开辟数组int* a = (int*)malloc(*returnSize * sizeof(int));// 判断是否开辟成功if (a == NULL){perror("malloc fail");return NULL;}int i = 0;_preorderTraversal(root, a, &i);return a;
}

代码解析:

利用 BTreeSize 函数求出节点总个数,来确定 returnSize 的大小
再定义 _preorderTraversal 函数进行前序递归遍历存储二叉树的数据到a数组中,需要注意的是,每个栈帧中 i 都是独立的,所以需要传递 i 的地址进行存储

代码验证:

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

前端中的 File 和 Blob两个对象到底有什么不同

JavaScript 在处理文件、二进制数据和数据转换时,提供了一系列的 API 和对象,比如 File、Blob、FileReader、ArrayBuffer、Base64、Object URL 和 DataURL。每个概念在不同场景中都有重要作用。下面的内容我们将会详细学习每个概念及其在实际应用中的用法…

酒店叮咚门铃的类型有哪些

在酒店的环境中,叮咚门铃虽小,却有着重要的作用,它是客人与酒店服务人员沟通的重要桥梁。酒店叮咚门铃主要有以下几种类型: 有线叮咚门铃 这是较为传统的一种类型。它通过电线连接,通常安装在客房的墙壁上,…

SFW3009 多功能移动照明系统

SFW3009 多功能移动照明系统 适用范围 广泛适用于铁路、水利、电网等抢险救援现场大范围移动照明。 结构特性 灯具体积小、重量轻,可以实现拖行、手提、背行三种携带方式。灯具底部也可以安装铁轨轮,便于用户在铁轨上作业。 灯头组件由左右两个灯头…

JavaWeb——Web入门(8/9)- Tomcat:基本使用(下载与安装、目录结构介绍、启动与关闭、可能出现的问题及解决方案、总结)

目录 基本使用内容 下载与安装 目录结构介绍 启动与关闭 启动 关闭 可能出现的问题及解决方案 问题一:启动时窗口一闪而过 问题二:端口号冲突 问题三:部署应用程序 总结 基本使用内容 Tomcat 服务器在 Java Web 开发中扮演着至关重…

w032基于web的阿博图书馆管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件&#xff0…

Java:使用Jackson解析json时如何正确获取节点中的值?

使用Jackson解析json时,经常会需要获取到某一节点下的值,例如: { “data”: { "test1": "value1", "test2": null, "test3": 10 } } 以Jackson2.13.5为例,使用at(jsonPtrExp)这种API&…

前端必懂:常见排序算法深度解析

在前端开发中,排序算法是一种非常重要的工具。无论是对数组进行排序以展示数据,还是对复杂对象进行排序以实现特定的功能,理解和掌握常见的排序算法对于提高开发效率和代码质量至关重要。本文将介绍几种前端常见的排序算法。 一、冒泡排序(Bu…

vue 依赖注入(Provide、Inject )和混入(mixins)

Prop 逐级透传问题​ 通常情况下,当我们需要从父组件向子组件传递数据时,会使用 props。想象一下这样的结构:有一些多层级嵌套的组件,形成了一棵巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分数据。…

开启鸿蒙开发之旅:核心组件及其各项属性介绍——布局容器组件

写在前面 组件的结构 rkTS通过装饰器 Component 和 Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件。 自定义组件中提供了一个 build 函数,开发者需在该函数内以链式调用的方式进行基本的 UI 描述 今天我们要学习的就是写在build 函数里的系…

数据结构OJ题

目录 轮转数组原地移除数组中所有元素val删除有序数组中的重复项合并两个有序数组 轮转数组 思路1: 1.利用循环将最后一位数据放到临时变量(n)中 2.利用第二层循环将数据往后移一位 3.将变量(n)的数据放到数组第一位 时…

Pencils Protocol 推出新板块 Auction ,为什么重要且被看好?

Pencils Protocol 上线了又一新产品板块 Auction,预示着生态版图的进一步完善,该板块的推出无论是对于 Pencils Protocol 协议本身,还是 Scroll 生态都是极为重要的。 社区正在成为主导加密市场发展的重要力量 自 DeFi Summer 以来&#xf…

Pytorch学习--神经网络--完整的模型训练套路

一、下载数据集 train_data torchvision.datasets.CIFAR10(root"datasets",trainTrue,transformtorchvision.transforms.ToTensor(),downloadTrue) train_data torchvision.datasets.CIFAR10(root"datasets",trainFalse,transformtorchvision.transform…

常用数字器件的描述-组合逻辑器件

目录 基本逻辑门 编码器 译码器 数据选择器 数值比较器 三态缓冲器 奇偶校验器 组合逻辑器件有逻辑门、编码器与译码器、数据选择器和数值比较器、加法器、三态器件和奇偶校验器等多种类型。 基本逻辑门 Verilog HDL中定义了实现七种逻辑关系的基元,例化这些…

在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能

在Django中可以使用CKEditor4和CKEditor5两个版本,分别对应软件包django-ckeditor和django-ckeditor-5。原来使用的是CKEditor4,python manager.py makemigrations时总是提示CKEditor4有安全风险,建议升级到CKEditor5。故卸载了CKEditor4&…

高效视觉方案:AR1335与i.MX8MP的完美结合

方案采用NXP i.MX8MP处理器和onsemi AR1335图像传感器,i.MX8MP集成四核Cortex-A53、NPU及双ISP技术。AR1335是一颗分辨率为13M的CMOS传感器。它使用了先进的BSI技术,提供了超高的分辨率和出色的低光性能,非常适合于需要高质量图像的应用。此外…

STM32软件SPI驱动BMP280(OLED显示)

STM32软件SPI驱动BMP280 OLED显示 BMP280简介寄存器简要说明SPI通讯代码逻辑代码展示 现象总结 BMP280简介 数字接口类型:IIC(从模式3.4MHz)或SPI(3线或4线制从模式10MHz) 气压测量范围:300~11…

基于Servlet实现MVC

目录 1.MVC相关概念 核心思想: 主要作用: 2.基于Servlet实现MVC 组成部分: 案例 实验步骤: 新建maven项目SpringMvcDemo 删除src目录并添加子模块MvcServlet ​编辑 导入相关依赖: 编写servlet 注册S…

剪辑师必备50多种擦拭转场/光效过渡效果Premiere Pro模板素材

项目特点: Premiere Pro的擦拭转场和光效闪烁过渡效果 Premiere Pro 2023及更高版本 适用于任何FPS和分辨率的照片和视频 易于使用 包含视频教程 无需插件 拖放方法 高品质 提高视频剪辑效率,节省时间,为视频创作添加独特且专业的转场风格。 …

数字化转型的架构蓝图构建指南:从理论到实践的系统实施路径

企业数字化转型的挑战与架构蓝图的重要性 在数字化浪潮的推动下,企业面临着前所未有的转型压力。传统业务模式和运营流程逐渐被更具弹性和敏捷性的数字化模式所取代,而企业架构蓝图作为战略转型的“导航仪”,能够为企业指明方向。企业架构治…

24.11.10

星期一: 补 23ICPC 合肥 G cf传送门 思路:由使第 k个最大这种条件易联想到二分,但是如何check是个问题 check使用dp,先想到个比较朴素的状态设定,dp【i】【j】…