华清远见嵌入式学习——春节作业——2.4日

作业要求:

编写程序实现二叉树的创建,三种遍历自己销毁

作业答案:

作业代码截图

作业代码效果图

作业代码

#include "myhead.h"// 定义二叉树节点结构体
struct Tree 
{int value;  //编号(值)struct Tree* left;  //左子树struct Tree* right;  //右子树
};// 创建新节点
struct Tree* create_node(int value) 
{//动态申请空间struct Tree* new = (struct Tree*)malloc(sizeof(struct Tree));//节点内部初始化new->value = value;new->left = NULL;new->right = NULL;return new;
}// 创建二叉树
struct Tree* create_tree() 
{//创建根节点,编号(值)为1struct Tree* root = create_node(1);//创建根节点的左孩子节点,编号(值)为2root->left = create_node(2);//创建根节点的右孩子节点,编号(值)为3root->right = create_node(3);//以下两个步骤可以放在需要增加二叉树节点时再进行,此处只是为了一次性构建出一个比较详细的二叉树//创建根节点的左孩子节点的左孩子节点,编号(值)为4root->left->left = create_node(4);//创建根节点的左孩子节点的右孩子节点,编号(值)为5root->left->right = create_node(5);return root;
}// 前序遍历  依次遍历根节点、左子树、右子树,直到所有节点都被遍历完毕
void preorder(struct Tree* node) 
{//当节点不为空时if (node != NULL) {//打印当前节点的编号(或者说,值)printf("%d ", node->value);//递归调用前序遍历函数,传参为当前节点的左孩子节点preorder(node->left);//递归调用前序遍历函数,传参为当前节点的右孩子节点preorder(node->right);}
}// 中序遍历  依次遍历左子树、根节点、右子树,直到所有节点都被遍历完毕
void midorder(struct Tree* node) 
{//当节点不为空时if (node != NULL){//递归调用中序遍历函数,传参为当前节点的左孩子节点midorder(node->left);//打印当前节点的编号(或者说,值)printf("%d ", node->value);//递归调用中序遍历函数,传参为当前节点的右孩子节点midorder(node->right);}
}// 后序遍历  依次遍历左子树、右子树、根节点,直到所有节点都被遍历完毕
void lastorder(struct Tree* node) 
{//当节点不为空时if (node != NULL){//递归调用后序遍历函数,传参为当前节点的左孩子节点lastorder(node->left);//递归调用后序遍历函数,传参为当前节点的右孩子节点lastorder(node->right);//打印当前节点的编号(或者说,值)printf("%d ", node->value);}
}// 销毁二叉树  采用后序的方式进行二叉树的销毁,这样可以完全销毁二叉树
void destroy_tree(struct Tree* node) 
{//当节点不为空时if (node != NULL) {//递归调用销毁函数,传参为当前节点的左孩子节点destroy_tree(node->left);//递归调用销毁函数,传参为当前节点的右孩子节点destroy_tree(node->right);//释放当前节点的空间,即销毁当前节点free(node);}
}//主函数
int main(int argc,const char * argv[]) 
{//定义二叉树的根节点,并同时创建一个二叉树struct Tree* root = create_tree();//前序遍历二叉树printf("前序遍历: ");preorder(root);//中序遍历二叉树printf("\n中序遍历: ");midorder(root);//后序遍历二叉树printf("\n后序遍历: ");lastorder(root);//为了结果美观,加一个换行putchar(10);//销毁二叉树destroy_tree(root);return 0;
}

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

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

相关文章

C语言代码审查:解析与应对策略

在C语言编程的世界中,代码审查是一项至关重要的任务,它旨在发现并修复潜在的错误、改进代码质量,并强化开发者的编码规范。本文将详尽阐述C语言代码审查过程中常见的错误类型及其深层原因,同时提供针对性的解决策略和最佳实践。 …

idea创建spring项目

一、环境 window10 IDEA 2022.2.3 maven-3.8.6 二、创建spring项目 1、新建Maven项目 File -> New -> Project 然后如下图选中Maven Archetype,在Archetype,选中maven-archetype-webapp,点击Create 2、配置maven 默认是使用IDEA内…

管理类联考-复试-英语-听力

文章目录 准备工作1.如何准备英语听力?2.听力学习注意事项一:培养良好的听音习惯,听读顺序要合理3.听力学习注意事项二:边听边记关键词 训练短期记忆能力4.听力学习注意事项三:熟记语篇衔接词把握信息走向5.听力学习注…

少儿编程 中国电子学会图形化编程2022年1月等级考试Scratch三级真题解析(选择题、判断题)

1.默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是?( ) A:可能出现6个不同位置的小猫和6个小球 B:可能出现6个…

Multisim14.0仿真(四十九)共阴极/阳极7段数码管驱动设计

一、74LS47/48简介: 74LS47/48芯片是一种常用的七段数码管译码器驱动器,常用在各种数字电路和单片机系统的显示系统中. 二、74LS47/48引脚说明及定义: 7段显示译码器74LS47/48是输出低/高电平有效的译码器,74LS47/48除了有实现7段显示译码器基本功能的输入(DCBA)和输出(Ya…

Unity类银河恶魔城学习记录1-9 PlayerWallSilde源代码 P36

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; us…

eCos flash模拟EEPROM实现NV系统

Flash需要擦除的原因&#xff1a;先擦除后写入的原因是为了工业上制作方便&#xff0c;即物理实现方便。 #include <cyg/infra/diag.h> #include <cyg/io/flash.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> // SPI flash…

gerrit 安装插件

1.插件下载 gerrit 3.9 插件&#xff0c;打开链接去右上角搜索插件名称&#xff0c;找到合适的版本&#xff0c;由于我这儿需要安装gerrit 3.9.1 的 autosubmitter 插件&#xff0c;但是好像没有 3.9 的&#xff0c;有下面这俩 上面那个可以理解为基于插件的主分支代码进行构…

java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector 240204

springboot3.2.2改为2.7.18后 控制台异常显示: java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector at org.mybatis.spring.mapper.ClassPathMapperScanner.(ClassPathMapperScanner.java:91) ~[mybatis-spring-3.0.3.jar:3.0.3] at org.mybatis.spring.m…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItemGroup组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之MenuItemGroup组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItemGroup组件 该组件用来展示菜单MenuItem的分组。 子组件 无 接…

高通android设备themal读取cpu温度

以msm8953的themal分布信息&#xff0c;主要是下图的位置&#xff1a; 这其中 cpu相关的themal的位置有&#xff1a; 读取thermal 温度数据可以通过以下几个步骤&#xff1a; 获取sensor_info rootmsm8953_64:/ # cat /sys/module/msm_thermal/sensor_info tsens:tsens_tz_se…

2024.1.30 Spark SQL的高级用法

目录 1、如何快速生成多行的序列 2、如何快速生成表数据 3.开窗函数 排序函数 平分函数 聚合函数 向上向下窗口函数 1、如何快速生成多行的序列 -- 需求: 请生成一列数据, 内容为 1 , 2 , 3 , 4 ,5 仅使用select语句 select explode(split(1,2,3,4,5,,)) as num;-- 需…

我用全志V851s做了一个魔法棒,使用Keras训练手势识别模型控制一切电子设备

这是一个可以直接启动原神的魔法棒~ 原神&#xff0c;启动&#xff01; 这是一个万全的解决方案&#xff01;只需要花80元再动动手&#xff0c;就可以将哈利波特的魔杖与人工智能结合到一起&#xff01;它就是用全志V851s做的赛博魔杖&#xff01; 这个魔法手杖有啥亮点 手势…

Linux mount命令教程:如何挂载文件系统(附案例详解和注意事项)

Linux mount命令介绍 mount命令在Linux中用于挂载Linux系统外的其它文件系统&#xff0c;每个设备在使用前都必须先挂载。此命令通常用于挂载文件系统。 Linux mount命令适用的Linux版本 mount命令在所有的Linux发行版中都是可用的&#xff0c;包括Debian、Ubuntu、Alpine、…

oracle 热备份和冷备份的优缺点

Oracle的热备份和冷备份是两种不同的备份策略&#xff0c;各有其优缺点。 热备份的优点包括&#xff1a; 可快速备份数据&#xff0c;备份时间短。备份时数据库仍可使用。可达到秒级恢复&#xff0c;即恢复到某一时间点上。可对几乎所有数据库实体进行恢复。恢复快速&#xf…

Go协程揭秘:轻量、并发与性能的完美结合

目录 1. Go协程简介什么是Go协程&#xff1f;Go协程与线程的比较Go协程的核心优势 2. Go协程的基本使用创建并启动Go协程使用匿名函数创建Go协程Go协程与主函数 3. Go协程的同步机制1. 通道 (Channels)2. sync.WaitGroup3. 互斥锁 (sync.Mutex) 4. Go协程的高级用法1. 选择器 (…

每日一题——LeetCode1394.找出数组中的幸运数

方法一 桶数组计数法 又要保存整数的数值和他出现的频次&#xff0c;那么碰到一个整数num就让res[num]&#xff0c;那么循环res数组&#xff0c;如果res[i]0则代表i没有在arr中出现过&#xff0c;res[i]n则代表i在arr中出现n次 因为题目要求只返回最大的幸运数&#xff0c;所…

计算机软件能力认证考试CCF-202312-1 仓库规划

#自己跑的测试没问题&#xff0c;不知道为啥就是不能满分 原理比较绕&#xff0c;就是让数组中一行不断地与其他行进行比较&#xff0c;最终得到各自的索引 #include <iostream> using namespace std; int main() {int n;int m;cin>>n>>m; int array[n][m];…

【C/C++ 08】简单计算器

一、题目 输入算术表达式&#xff0c;可包含空格&#xff0c;检查算术表达式的合法性&#xff0c;若算术表达式不合法&#xff0c;打印错误类型&#xff0c;若合法&#xff0c;则进行运算&#xff0c;打印计算结果。 二、算法 1. 将输入的算术表达式字符串去除空格。 2. 检查…

vue在main.js中引入三方插件不生效的原因

有的时候需要比较复杂的功能,但是自己实现比较复杂的话,可以引入第三方插件.如果这个第三方插件需要全局都使用的话,可以在main.js中进行引入. 比如router elementplus之类的. import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/…