题目练习之二叉树那些事儿(续集)


♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥

♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥

♥♥♥我们一起努力成为更好的自己~♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥



✨✨✨✨✨✨个人主页✨✨✨✨✨✨


目录

练习1:二叉树的前序遍历

题目

思路

代码

练习2:二叉树的中序遍历

​编辑

练习3:二叉树的后序遍历

练习4:二叉树遍历

题目

思路

代码


这一篇博客我们继续来看看二叉树的OJ题目练习~

练习1:二叉树的前序遍历

力扣——144二叉树的前序遍历

题目

二叉树的遍历前面我们说过有四种遍历方式,这里需要我们进行前序遍历,我们可以看到它输出结果是没有NULL的,所以为空时直接返回就好了。同时我们可以看到函数第二个参数是int* 类型的,根据他的名字returnSize我们猜测它是前序遍历到的结点个数~并且函数返回类型也是int* ,说明我们需要返回前序遍历结果的数组~

思路

知道了题目的要求,我们可以有下面的思路

首先求出二叉树的结点个数,创建一个结点个数大小的数组,前序遍历将结点保存的数据放到数组中,返回数组

代码

//重定义
typedef struct TreeNode TreeNode;//总结点个数=1+左子树结点个数+右子树结点个数
int BinarySize(TreeNode* root)
{if(root == NULL){return 0;}return 1 + BinarySize(root->left) + BinarySize(root->right);
}
void PreOrder(TreeNode* root,int* arr,int* pi)
{if(root == NULL){return;}//前序遍历//根左右arr[(*pi)++] = root->val;PreOrder(root->left, arr, pi);PreOrder(root->right, arr, pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {//求二叉树结点个数*returnSize = BinarySize(root);//申请空间int* arr = (int*)malloc((*returnSize) * sizeof(int));//前序遍历,保存数据到数组中int i = 0;//数组下标从0开始PreOrder(root,arr,&i);//返回数组return arr;
}

提交成功~

接下来两个题目是与这个题类似的,思路代码都是类似的~我们这里就直接给出代码~

练习2:二叉树的中序遍历

力扣——94二叉树的中序遍历

 //重定义
typedef struct TreeNode TreeNode;//总结点个数=1+左子树结点个数+右子树结点个数
int BinarySize(TreeNode* root)
{if (root == NULL){return 0;}return 1 + BinarySize(root->left) + BinarySize(root->right);
}void InOrder(TreeNode* root, int* arr, int* pi)
{if (root == NULL){return;}//中序遍历//左根右InOrder(root->left, arr, pi);arr[(*pi)++] = root->val;InOrder(root->right, arr, pi);
}int* inorderTraversal(struct TreeNode* root, int* returnSize) {//求二叉树结点个数*returnSize = BinarySize(root);//申请空间int* arr = (int*)malloc((*returnSize) * sizeof(int));//中序遍历,保存数据到数组中int i = 0;//数组下标从0开始InOrder(root, arr, &i);//返回数组return arr;
}

练习3:二叉树的后序遍历

力扣——145二叉树的后序遍历

//重定义
typedef struct TreeNode TreeNode;//总结点个数=1+左子树结点个数+右子树结点个数
int BinarySize(TreeNode* root)
{if (root == NULL){return 0;}return 1 + BinarySize(root->left) + BinarySize(root->right);
}void PostOrder(TreeNode* root, int* arr, int* pi)
{if (root == NULL){return;}//后序遍历//左右根PostOrder(root->left, arr, pi);PostOrder(root->right, arr, pi);arr[(*pi)++] = root->val;
}int* postorderTraversal(struct TreeNode* root, int* returnSize) {//求二叉树结点个数*returnSize = BinarySize(root);//申请空间int* arr = (int*)malloc((*returnSize) * sizeof(int));//后序遍历,保存数据到数组中int i = 0;//数组下标从0开始PostOrder(root, arr, &i);//返回数组return arr;
}

提交通过~

练习4:二叉树遍历

牛客——二叉树遍历

题目

这里我们会发现题目希望我们编写一个程序,而不是一个函数,那么这里就需要我们自己去创建二叉树,定义二叉树结点,不能使用现成的。

看看题目:题目希望我们给一个给定的字符串进行构造一个二叉树(#代表空格,同时也代表着空树),并且中序遍历二叉树,输出中序遍历二叉树的结果~

思路

首先我们需要定义二叉树结点,申请结点根据给定的字符串构造二叉树(这里我们构造二叉树采用的也是递归构造的方法,先构造根结点,再构造左右子树)最后进行中序遍历输出结果

代码

#include <stdio.h>
#include <stdlib.h>//malloc头文件//定义二叉树结点
typedef char BTNodeDataTye;
typedef struct BinaryTreeNode
{BTNodeDataTye data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTreeNode;BTreeNode* BuyNode(BTNodeDataTye x)
{BTreeNode* newnode = (BTreeNode*)malloc(sizeof(BTreeNode));if(newnode == NULL){perror("malloc fail");exit(1);}newnode->data = x;newnode->left = newnode->right = NULL;return newnode;
}
BTreeNode* BTreeCreate(BTNodeDataTye* arr,int* pi)
{//取到字符串下标为(*pi)的数据创建结点if(arr[*pi] == '#'){//往后面走,这里为空结点++(*pi);return NULL;}BTreeNode* root = BuyNode(arr[*pi]);//字符串下标往后面走++(*pi);//递归构造左右子树root->left = BTreeCreate(arr,pi);root->right = BTreeCreate(arr,pi);return root;
}void Inorder(BTreeNode* root)
{if(root == NULL){return;}Inorder(root->left);printf("%c ",root->data);Inorder(root->right);
}int main() 
{//输入字符串//题目给出字符串长度不超过100char arr[100];scanf("%s",arr);//构造二叉树int i = 0;//i传地址,形参改变才会影响实参BTreeNode* root = BTreeCreate( arr, &i);//中序遍历Inorder(root);return 0;
}

提交通过~我们再一次体会了递归的暴力美学~

除此之外,我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https:/cloud.tencent.com/developer/support-plan?invite_code=34m59s418000k


♥♥♥本篇博客内容结束,期待与各位优秀程序员交流,有什么问题请私信♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥


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

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

相关文章

【STL栈和队列】:高效数据结构的应用秘籍

前言&#xff1a; C 标准模板库&#xff08;STL&#xff09;为我们提供了多种容器&#xff0c;其中 stack&#xff08;栈&#xff09;和 queue&#xff08;队列&#xff09;是非常常用的两种容器。 根据之前C语言实现的栈和队列&#xff0c;&#xff08;如有遗忘&#xff0c;…

Zabbix 7 最新版本安装 Rocky Linux 8

前言 本实验主要在Rocky Linux 中安装Zabbix&#xff0c;其他centos8、Debian、Ubuntu、Alma Linux都可以安装&#xff0c;就是在中间件有点不同。Nginx就要配置一下&#xff0c;官网给的教程也算是很规范的&#xff0c;就是在MySQL上要自己安装&#xff0c;他没有告诉我们&am…

git新手使用教程

git新手使用教程 一、安装和初始化配置2、新建仓库3.工作区域和文件状态4.添加和提交文件5 git reset回退版本6 使用git diff查看差异7 使用git rm删除文件8 .gitignore忽略文件9 注册GitHub账号10 SSH配置和克隆仓库11 关联本地仓库和远程仓库12 Gitee的使用 由B站视频教程整理…

【GPTs】Email Responder Pro:高效生成专业回复邮件

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Email Responder Pro主要功能适用场景优点缺点 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; Email Craft 是一款专门用于…

2024下半年软考系统架构师案例分析题试题与答案--ROS机器人操作系统

一、知识点回顾 ROS(Robot Operating System)是一个用于编写机器人软件的框架。它提供了一系列的工具和库,帮助开发者创建复杂的、可以在多种操作系统上运行的机器人应用程序。 ROS的主要特点包括: 分布式计算能力:ROS提供了一种方式让多个计算机或设备协同工作,通过…

探索Copier:Python项目模板的革命者

文章目录 **探索Copier&#xff1a;Python项目模板的革命者**1. 背景介绍&#xff1a;为何Copier成为新宠&#xff1f;2. Copier是什么&#xff1f;3. 如何安装Copier&#xff1f;4. 简单库函数使用方法4.1 创建模板4.2 从Git URL创建项目4.3 使用快捷方式4.4 动态替换文本4.5 …

密码学知识点整理二:常见的加密算法

常用的加密算法包括对称加密算法、非对称加密算法和散列算法。 对称加密算法 AES&#xff1a;高级加密标准&#xff0c;是目前使用最广泛的对称加密算法之一&#xff0c;支持多种密钥长度&#xff08;128位、192位、256位&#xff09;&#xff0c;安全性高&#xff0c;加密效率…

大模型就业收入高吗?大模型入门到精通,收藏这篇就够了

目前&#xff0c;已经可以说人工智能&#xff08;AI&#xff09;是推动社会进步和产业升级的重要力量。 其中&#xff0c;AI大模型作为人工智能领域的核心技术之一&#xff0c;正引领着新一轮的技术革命。 2024年&#xff0c;AI大模型开发工程师无疑成为了IT行业中最炙手可热…

Kubebot:一款Google云平台下的Slackbot安全测试工具

Kubebot 今天给大家介绍的是一款名叫Kubebot的安全测试Slackbot&#xff0c;该工具基于Google 云平台搭建&#xff0c;并且提供了Kubernetes后端。 项目架构 数据流 1.API请求由Slackbot发起&#xff0c;发送至API服务器&#xff0c;API服务器以Kubernetes(K8s)集群中的Docke…

openai Realtime API (实时语音)

https://openai.com/index/introducing-the-realtime-api/ 官方demo https://github.com/openai/openai-realtime-console 官方demo使用到的插件 https://github.com/openai/openai-realtime-api-beta?tabreadme-ov-file 装包配置 修改yarn.lock 这个包是从github下载的 &q…

【IC】DTCO

DTCO本质上是DSE。。。 文章A Novel Framework for DTCO: Fast and Automatic Routability Assessment with Machine Learning for Sub-3nm Technology Options中提到&#xff1a; std cell尺寸缩小不一定会在block模块级获得面积收益。。。得综合考虑&#xff0c;综合了设计…

SpringBoot配置Rabbit中的MessageConverter对象

SpringAMQP默认使用SimpleMessageConverter组件对消息内容进行转换 SimpleMessageConverter&#xff1a; only supports String, byte[] and Serializable payloads仅仅支持String、Byte[]和Serializable对象Jackson2JsonMessageConverter&#xff1a;was expecting (JSON Str…

Python毕业设计选题:基于django+vue的医院挂号系统设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 病人管理 科室类型管理 医生管理 公告咨询管理 挂号预约管理 科室信息管理 摘要 医…

arm 汇编技巧

汇编标号&#xff1a;f表示forward&#xff0c; b表示backward&#xff1a; Here is an example: 1: branch 1f 2: branch 1b 1: branch 2f 2: branch 1b Which is the equivalent of: label_1: branch label_3 label_2: branch label_1 label_3: branch label_4 label_4: bra…

Java异步编程CompletableFuture(串行,并行,批量执行)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

Redis 缓存击穿

目录 缓存击穿 什么是缓存击穿&#xff1f; 有哪些解决办法&#xff1f; 缓存穿透和缓存击穿有什么区别&#xff1f; 缓存雪崩 什么是缓存雪崩&#xff1f; 有哪些解决办法&#xff1f; 缓存预热如何实现&#xff1f; 缓存雪崩和缓存击穿有什么区别&#xff1f; 如何保…

电脑不显示wifi列表怎么办?电脑不显示WiF列表的解决办法

有用户会遇到电脑总是不显示wifi列表的问题&#xff0c;但是不知道要怎么解决。随着无线网络的普及和使用&#xff0c;电脑无法显示WiFi列表的问题有时会让人感到困扰。电脑不显示WiFi列表是很常见的问题&#xff0c;但这并不意味着你无法连接到网络。不用担心&#xff0c;这个…

知识图谱,语义分析,全文检索,neo4j,elaticsearch,知识库平台(java,vue)

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台&#xff1f; 助力企业…

Java项目实战II基于Spring Boot的问卷调查系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导 一、前言 在当今信息爆炸的时代&#xff0c;问卷调查…

博客摘录「 java三年工作经验面试题整理《精华》」2023年6月12日

JDK 和 JRE 有什么区别&#xff1f;JDK&#xff1a;java 开发工具包&#xff0c;提供了 java 的开发环境和运行环境。JRE&#xff1a;java 运行环境&#xff0c;为 java 的运行提供了所需环境。JDK 其实包含了 JRE&#xff0c;同时还包含了编译 java 源码的编译器 javac&#x…