华清远见嵌入式学习——春节作业——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() 
{
    //创建根节点,编号(值)为1
    struct Tree* root = create_node(1);

    //创建根节点的左孩子节点,编号(值)为2
    root->left = create_node(2);
    //创建根节点的右孩子节点,编号(值)为3
    root->right = create_node(3);

    //以下两个步骤可以放在需要增加二叉树节点时再进行,此处只是为了一次性构建出一个比较详细的二叉树
    //创建根节点的左孩子节点的左孩子节点,编号(值)为4
    root->left->left = create_node(4);
    //创建根节点的左孩子节点的右孩子节点,编号(值)为5
    root->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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9隐藏登录用户(无需接触磁盘即可修改文件内容)_Linux_Rootkit.md

Xcellerator 密码学Linux其他逆向工程 文章目录 [Linux Rootkit 第 9 部分:隐藏登录用户(无需接触磁盘即可修改文件内容)](https://xcellerator.github.io/posts/linux_rootkits_09/)终端设备UTMP用户空间工具如何解析 UTMP?挂钩…

如何实现冻干机和产品全生命周期的验证和监测?

为什么冻干需要工艺优化和合规性 冻干是制药和生物技术产品的关键工艺,需要精确控制关键的温度和压力参数。通过遵守 GMP 和 FDA 合规性等监管准则,您可以生产出更高质量的产品,避免不必要的浪费,并缩短产品上市时间。 要想在冻干…

[linux] kolla-ansible 部署的openstack 修改mariadb默认端口号

kolla-ansible 部署前修改global.yml #freezer_database_backend: "mariadb" database_port: 9306 mariadb_port: 9306如果已经部署成功,直接修改配置文件里的端口号重启是没有用的,怀疑内部做了缓存,查看openstack 使用的memcach…

零基础学编程,从入门到精通,中文编程工具下载,时间选择构件用法

零基础学编程,从入门到精通,中文编程工具下载,时间选择构件用法 一、前言 编程工具下载及源码文件下载路径 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件…

Unity类银河恶魔城学习记录1-11 PlayerPrimaryAttack P38

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

基于spring boot实现邮箱发送和邮箱验证

目录 一、邮箱发送实现1. 开通邮箱服务2. 添加邮箱依赖3.添加配置4.添加邮箱通用类5. 测试类 二、邮箱验证实现1.添加依赖2. 添加配置3.添加controller4. 测试 项目地址: https://gitee.com/nssnail/springboot-email 一、邮箱发送实现 1. 开通邮箱服务 使用qq邮箱、163邮箱都…

《计算机网络简易速速上手小册》第10章:未来网络技术趋势(2024 最新版)

文章目录 10.1 边缘计算与网络设计 - 未来网络的速度与激情10.1.1 基础知识10.1.2 重点案例:使用 Python 实现边缘计算的实时视频分析准备工作Python 脚本示例 10.1.3 拓展案例1:智能交通系统Python 脚本示例 - 边缘计算设备上的交通流量分析 10.1.4 拓展…

vcruntime140_1.dll 文件缺失的解决方法,简单的修复方法分享

遇到 vcruntime140_1.dll 文件缺失是一种常见的问题,但无需过于担心,因为这类问题通常有多种解决办法。接下来,我会为大家详细介绍如何处理 vcruntime140_1.dll 文件缺失的情况,以及在解决过程中应该注意的重要事项。 一.vcrunti…

Python flask 模板详解

文章目录 1 概述1.1 模板简介1.2 templates 文件1.3 简单应用 2 模板语法2.1 for 循环2.2 if 判断 3 模板的继承3.1 格式要求3.2 实现示例3.3 复用父模板的内容:super 1 概述 1.1 模板简介 定义:定义好的 html 文件,用于快速开发 web 页面J…

04-OpenFeign-请求超时机制

基于 2021.0.1版本 具体有以下几种超时参数设置 以下仅限2021.0.1 以前的版本,高于该版本的spring cloud 已修复该问题 1、默认的超时时间 默认不生效 连接超时时间10秒、读超时时间60秒,源码在feign.Request.Options#Options()这个方法中 2、open…

在Linux中如何理解页表和进程地址

1、进程地址是进程读取资源的窗口 2、页表决定了进程真实拥有的资源情况 3、合理的对进程地址空间页表进行资源划分,就可以对进程的资源进行分类 这个过程应该如何去理解呢请看下面的图 我们知道程序被加载到进程中,会产生相应的PCB,并且…

【JavaScript 漫游】【006】数据类型 array

文章简介 本文为【JavaScript 漫游】专栏的第 006 篇文章,记录笔者在了解 JS 数据类型 array 中摘录的知识点。 数组的本质是对象属组的 length 属性for ... in 循环和数组的遍历数组的空位类数组对象 除了上述 5 个重要知识点,学习数组更为重要的是掌…

CSS transition(过渡效果)详解并附带示例

CSS过渡效果(CSS transitions)是一种在元素属性值发生变化时,通过指定过渡效果来实现平滑的动画效果的方法。通过定义起始状态和结束状态之间的过渡属性,可以使元素的变化更加流畅和可视化。 过渡效果的基本语法如下:…

使用潜在向量进行检测、屏蔽和重建以进行遮挡的面部表情识别

Latent-OFER: Detect, Mask, and Reconstruct with Latent Vectors for Occluded Facial Expression Recognition 一、创新点 (1)提出了一种与表情相关的特征提取器,它使用空间注意力为特定的面部特征分配更高的权重,从而使我们能…

前端开发中不同语言【react-i18next】

目录 查看并设置语言 单页面&#xff1a;html lang ​编辑 浏览器 自定义翻译&#xff1a;react-i18next 设置 模块&#xff1a;staticData.ts 散(重复利用)&#xff1a;命名空间.json 应用 准备 html标签 查看并设置语言 单页面&#xff1a;html lang 英语: <…

RflySim | 定点位置控制器设计实验三

RflySim| 定点位置控制器设计实验三 01 分析实验 1.调节PD控制器的相关参数改善系统控制性能&#xff0c;并记录超调量和调节时间&#xff0c;得到满意的参数。 2.在得到满意参数后&#xff0c;对系统进行扫频以绘制Bod图&#xff0c;观察系统幅频响应、相频响应曲线&#xf…

【服务器】RAID(独立磁盘冗余阵列)

RAID&#xff08;独立磁盘冗余阵列&#xff09; 一、RAID的介绍二、RAID的分类#2-1 RAID 02-2 RAID 1#2-3 RAID 32-4 RAID 52-5 RAID 62-6 RAID 10(先做镜像&#xff0c;再做条带化)2-7 RAID 01&#xff08;先做条带&#xff0c;再做镜像&#xff09;2-8 RAID比较 三、磁盘阵列…

国内最全的Spring Boot系列之七

• 阿里巴巴前高级研发工程师 • 三家千万级互联网企业技术顾问 • MBTI/盖洛普技术专家 • 厦门某高校外聘教师 • 51CTO特约合作讲师 • 网易云课堂签约讲师 •《深入理解设计模式》作者 一转眼马上要过年了&#xff0c;回首2023年&#xff0c;感觉自己无所事事、碌碌无…

探索网络定位与连接:域名和端口的关键角色

目录 域名 域名的作用 域名的结构 域名的解析配置 父域名、子域名​编辑 https的作用 端口 图解端口 端口怎么用 判断网站是否存活 端口的作用 域名 域名是互联网上用于标识网站的一种易于记忆的地址。 域名是互联网基础架构的一个重要组成部分&#xff0c;它为网…

Django学习记录01

1.项目结构 djangoProject02 ├── manage.py 【项目的管理&#xff0c;启动项目、创建app、数据管理】【不要动】【常常用】 └── jangoProject02 ├── __init__.py ├── settings.py 【项目配置】 【常常修改】 ├── urls.py …