数据结构-树-006

1二叉树

1.1目标二叉树

在这里插入图片描述

前序遍历:ABDHIEJCFKG
中序遍历:HDIBEJAFKCG
后序遍历:HIDJEBKFGCA
层序遍历:ABCDEFGHIJK

运行结果:

运行结果符合目标二叉树的深度优先(前序遍历,中序遍历,后序遍历)遍历结果。

在这里插入图片描述

树的表示:char sex[]={'A','B','D','H','#','#','I','#','#','E','#','J','#','#','C','F','#','K','#','#','G','#','#'};

说明:

这里自定义数据类型是一个结构体,为了快速实现该二叉树,使用了自定义数据类型中的成员【sex】,其它成员未进行操作。

1.2树的结点结构体定义

/*==========自定义数据类型==========*/
typedef struct student
{
    char name[32];
    char sex;
    int age;
}DATA_TYPE;
/*==========定义一个树结点==========*/
typedef struct tree_node
{
    DATA_TYPE data;//数据域
    struct tree_node *left_child;
    struct tree_node *right_child;
}TREE_NODE;

1.3创建一个二叉树

/*==========创建一个二叉树==========*/
TREE_NODE *create_binary_tree(void)
{
    DATA_TYPE data;
    TREE_NODE *pnode=NULL;

    data.sex=sex[tree_create_index++];
    

    if('#'==data.sex)
    {
        return NULL;
    }

    /*创建一个二叉树结点*/
    pnode=malloc(sizeof(TREE_NODE));
    if(NULL==pnode)
    {
        perror("fail to malloc");
        return NULL;
    }

    /*新结点初始化*/
    pnode->data=data;
    pnode->left_child=create_binary_tree();
    pnode->right_child=create_binary_tree();

    return pnode;
}

1.4树的遍历

自定义树的遍历方式:

/*==========遍历方式==========*/
void show_data(TREE_NODE *proot)
{
    printf("%-10s\t%-10c\t%-10d\n",proot->data.name,proot->data.sex,proot->data.age);
}

1.4.1前序遍历

/*==========前序遍历==========*/
void preorder_traversal(TREE_NODE *proot,void (*pfun)(TREE_NODE *))
{
    if(NULL==proot)
    {
        return ;
    }

    pfun(proot);
    preorder_traversal(proot->left_child,pfun);
    preorder_traversal(proot->right_child,pfun);
}

1.4.1中序遍历

/*==========中序遍历==========*/
void inorder_traversal(TREE_NODE *proot,void (*pfun)(TREE_NODE *))
{
    if(NULL==proot)
    {
        return ;
    }

    inorder_traversal(proot->left_child,pfun);
    pfun(proot);
    inorder_traversal(proot->right_child,pfun);
}

1.4.1后序遍历

/*==========后序遍历==========*/
void postorder_traversal(TREE_NODE *proot,void (*pfun)(TREE_NODE *))
{
    if(NULL==proot)
    {
        return ;
    }

    postorder_traversal(proot->left_child,pfun);
    postorder_traversal(proot->right_child,pfun);
    pfun(proot);
}

1.4.1层序遍历

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

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

相关文章

Bert基础(八)--Bert实战之理解Bert微调

到目前为止,我们已经介绍了如何使用预训练的BERT模型。现在,我们将学习如何针对下游任务微调预训练的BERT模型。需要注意的是,微调并非需要我们从头开始训练BERT模型,而是使用预训练的BERT模型,并根据任务需要更新模型…

基于单片机的太阳能充电系统设计

摘要:本文所设计的太阳能充电系统主要由以下几个模块组成:STC89C52 主控模块、TP4056 充电电路、电压AD 采集模块、LCD1602 液晶显示模块和太阳能充电电池等组成。此太阳能充电器制作简单,性价比高,性能稳定。 关键词:LCD1602;太阳能充电系统;ADC0832 太阳能充电系统的充…

【C++】基础:STL容器库

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍STL容器库。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#x1f95…

vue动态渲染本地路径图片不显示的解决方案,v-fro 渲染本地图片路径不显示

1、第一种解决方法 如果直接使用本地路径渲染是渲染不出来的&#xff0c;因为这种情况下渲染时会发送网络请求加你的本地地址所以渲染不出来。 这样怎么能找到路径&#xff1f;解决方案如下 // 渲染正常渲染即可 <div v-for"(item, index) in imgPath" :key&quo…

【WEEK4】 【DAY4】AJAX第一部分【中文版】

2024.3.21 Thursday 目录 8.AJAX8.1.简介8.2.伪造ajax8.2.1.新建module&#xff1a;springmvc-06-ajax8.2.2.添加web支持&#xff0c;导入pom依赖8.2.2.1.修改web.xml8.2.2.2.新建jsp文件夹 8.2.3.新建applicationContext.xml8.2.4.新建AjaxController.java8.2.5.配置Tomcat8.…

【MATLAB源码-第9期】基于matlab的DQPSK的误码率BER和误符号率SER仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 DQPSK信号的解调与2DPSK信号的解调类似&#xff0c;也有两种方法&#xff0c;分别是极性比较法和相位比较法 极性比较法。其原理方框图如下图所示。由于DQPSK信号可以看做是两路2DPSK信号的合成&#xff0c;解 调时也可以分别…

Python环境下5种TE过程(Tennessee Eastman Process)故障检测方法

田纳西-伊斯特曼过程&#xff0c;也被称作TE过程&#xff0c;主要模拟美国田纳西州一家名为伊斯曼的化工公司的化工过程。TE过程是一个高度复杂、非线性和多变量的过程&#xff0c;涉及到多个阶段和多个控制参数&#xff0c;其中某些参数会相互影响&#xff0c;因此&#xff0c…

读研究生的时候早恋被导师发现了怎么办?

研究生早恋这事&#xff0c;危险重重&#xff0c;比走钢丝还紧张&#xff0c;这根本就是走在科研生涯的悬崖边上&#xff0c;随时都有掉下去的危险。 让我们来详细分析一下为什么你应该立刻收心&#xff0c;专注于你的实验和论文&#xff0c;而不是浪费时间在所谓的“早恋”上。…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…

电脑桌面记事本便签软件,记事本软件哪个好用

正在电脑前忙碌工作&#xff0c;突然想起今晚有个重要的会议&#xff0c;或者是明天有一个重要的任务需要完成&#xff0c;但是手头的工作又无法让你离开电脑&#xff0c;这时候&#xff0c;你多么希望有一个便捷的电脑桌面记事本便签软件&#xff0c;可以让你快速记录下这些重…

Python时间

UTC ~ 北京时间 【差8小时】 格式化日期时间为字符串:strftime 时间戳-1970.1.1到现在的秒数:time.time() AttributeError: partially initialized module ‘datetime’ has no attribute ‘fromtimestamp’ (most likely due to a circular import) 改正&#xff1a;文件名和…

【C++】隐藏的this指针

文章目录 1.this指针的引出2.this指针的特性 1.this指针的引出 我们通过日期类来学习this指针&#xff0c;首先我们先定义一个日期类。 class Date { public:void Display(){cout << _year << "-" << _month << "-" << _d…

1688商品API接口数据采集助力电商ERP

1688商品API接口数据采集可以帮助电商供应链ERP系统搭建&#xff0c;提供所需的商品信息和数据。 通过使用1688商品API接口&#xff0c;可以直接从1688网站上抓取商品信息&#xff0c;包括商品名称、价格、库存、属性等。这样&#xff0c;可以省去手动复制粘贴的步骤&#xff…

矩阵的归一化技术

矩阵的归一化&#xff08;Normalization&#xff09;是将矩阵中的元素缩放到一个特定的范围或者标准&#xff0c;使得在进行比较、评估或计算时能够保持数值稳定性和可比性。这个过程在数据预处理、机器学习、图像处理等领域中非常重要。归一化有助于改善算法的收敛速度和精度&…

elasticsearch 教程(一)程序建立索引

elasticsearch 教程&#xff08;一&#xff09;程序建立索引 从elasticsearch 8.x开始&#xff0c;除了通过kibana建立索引之外&#xff0c;还可以在Java程序定义索引。待程序运行时&#xff0c;会先检测是否建立索引&#xff0c;如果已建立索引&#xff0c;即使程序中定义的索…

百能云板开启1-6层陶瓷pcb板定制服务

普通PCB通常是由铜箔和基板粘合而成&#xff0c;而基板材质大多数为玻璃纤维&#xff08;FR-4&#xff09;&#xff0c;酚醛树脂&#xff08;FR-3&#xff09;等材质&#xff0c;粘合剂通常是酚醛、环氧等。在PCB加工过程中由于热应力、化学因素、生产工艺不当等原因&#xff0…

哈希冲突解决的几种方式

目录 哈希冲突 哈希冲突-避免方式1-哈希函数的设计 1. 直接定制法--(常用) 2. 除留余数法--(常用) 3. 平方取中法--(了解) 哈希冲突-避免方式2-负载因子调节 哈希冲突-解决方式1-闭散列 1.线性探测 2.二次探测 哈希冲突-解决方式2-开散列(哈希桶) 哈希冲突 在上文中…

【Java程序设计】【C00383】基于(JavaWeb)Springboot的水产养殖系统(有论文)

【C00383】基于&#xff08;JavaWeb&#xff09;Springboot的水产养殖系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c…

SketchUp草图大师模型网:哪家更值得信赖?

草图大师模型网是一个提供模型下载和分享的平台&#xff0c;用户可以在上面找到大量的SU模型&#xff0c;并学习一些草图大师的使用技巧。那么&#xff0c;SketchUp草图大师模型网哪家更值得信赖呢?下面将从多个角度进行比较和分析。 首先&#xff0c;我们要看看草图大师模型网…

python关于字符串基础学习

字符串 python字符串是不可改变的 Python不支持单字符类型&#xff0c;单字符也是作为一个字符串使用的。 字符串编码 python3直接支持Unicode,可以表示世界上任何书面语言的字符 python3的字符默认就是16位Unicode编码&#xff0c;ASCII是Unicode的子集 使用内置函数 ord()…