数据结构-树-006

news2024/9/23 1:28:02

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层序遍历

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

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

相关文章

【c++】【STL】stack类、queue类、deque类详解及模拟

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:stack和queue,deque类 主厨:邪王真眼 所属专栏:c专栏 主厨的主页:Chef‘s blog 这可是…

Endnote(作者,年份)文中引用显示‘and etal‘与‘和 等‘

软件版本:Endnote X9.1,样式:Harvard,其余使用(作者,年份)的样式均可,GBT7714就有作者年份类型 本教程适用于X系列~ Endnote20及以上版本请移步另一条博文,指路:(我还没…

“双碳”目标下资源环境中的可计算一般均衡(CGE)模型教程

原文链接:“双碳”目标下资源环境中的可计算一般均衡(CGE)模型https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599079&idx4&sn82ea6c6f506cd20d1e0cd590faaa0611&chksmfa820200cdf58b16dc5b79746901cc9a4048b46db5…

《自动机理论、语言和计算导论》阅读笔记:p5-p27

《自动机理论、语言和计算导论》学习第2天,p5-p27总结,总计23页。 一、技术总结 1.集合 (1)commutative law of union. (2)distribute law of union. 2.归纳法(induction) & 演绎法(deduction) (1)归纳法:从许多个别的事实或原理中…

【zlm】问题记录:chrome更新引起的拉不出webrtc; 证书校验引起的放几秒中断

目录 chrome更新引起的拉不出webrtc 证书校验引起的放几秒中断 chrome更新引起的拉不出webrtc 【zlm】最新的chrome版本中的报错: 我有个问题event.js:8 [RTCPusherPlayer] DOMException: Failed to execute setRemoteDescription on RTCPeerConnection: Failed …

LabVIEW焓差试验室流量计现场自动校准系统

LabVIEW焓差试验室流量计现场自动校准系统 在现代工业和科研领域,流量计的准确性对于保证生产过程的质量和效率非常重要。开发了一种基于LabVIEW的焓差试验室流量计现场自动校准系统,通过提高流量计校准的准确性和效率。 在空调器空气焓值法能效测量装…

hololens 2 投屏 报错

使用Microsoft HoloLens投屏时,ip地址填对了,但是仍然报错,说hololens 2没有打开, 首先检查 开发人员选项 都打开,设备门户也打开 然后检查系统–体验共享,把共享都打开就可以了

【k8s】kubeasz 3.6.3 + virtualbox 搭建本地虚拟机openeuler 22.03 三节点集群 离线方案

kubeasz项目源码地址 GitHub - easzlab/kubeasz: 使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响 拉取代码,并切换到最近发布的分支 git clone https://github.com/easzlab/kubeasz cd kubeasz gi…

C++细节

背景知识: 面向对象的编程中,类(Class)是创建对象的蓝图或模板,它包含了数据(通常称为属性或变量)和行为(通常称为方法或函数)。将数据封装为私有(private&am…

【Java】:类和对象

1.面向对象的初步认知 1.1 什么是面向对象 Java是一门面向对象的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知…

CDNS PCIe VIP debug info

1. TLP payload的顺序是反向的,即大小端反的,比如下面的denalirc打印的信息看,pl是我们发TLP时的配置,Cfg才是真正的data顺序。 而seq写的时候如下:可以看到payload[2]时第三个8bit payload,但是我们是想配…

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的,有个客户解密了一个js,然后又看不懂里边的一些逻辑,想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的,以及如何下载应用的。继而诞生了这篇文章,讲解一下他的基本原理。 渐进式Web应用…

UE5学习日记——蓝图节点前缀关键字整理

一、起因 节点如海,中英文翻译的时候还是有差别的,比如: 同一个中文,可能在英文里完全不同,连出现位置可能都不一样 附加 Attach Actor To Component(将Actor附加到组件)Append Array&#xf…

【竞技宝】DOTA2-PGL联赛:niu神无解 LGD2-0轻松击败DH

北京时间2024年3月26日,PGL联赛中国区的比赛在昨日正式打响,首日共进行了四场胜者组首轮的比赛,第四场比赛由LGD对阵DH。本场比赛,DH两局都在前中期和LGD有来有回,但niu的中期节奏完全摧毁了DH,最终LGD2-0轻松击败DH。以下是本场比赛的详细战报。 第一局: 首局比赛,LGD在天辉方…

Python Flask框架 -- flask-migrate迁移ORM模型

# 之前使用的这个db.create_all()很有局限性,它不能把在class里修改的东西同步上数据库,所以不用了 # with app.app_context(): # 请求应用上下文 # db.create_all() # 把所有的表同步到数据库中去 例如,在User类中增加一个email字段&…

selenium自动化测试-unittest框架

unittest框架的优点 (1)能够组织多个用例去执行 (2)提供丰富的断言方法 (3)能够生成测试报告 unittest框架的核心要素 1. TestCase测试用例 TestCase(测试用例),最小的测试单元,创建的测试类需要继承该基类 步骤: (1&#x…

Vue2(十一):全局事件总线、消息订阅与发布pubsub、TodoList的编辑功能、$nextTick、过渡与动画

一、全局事件总线 1、思路解析 一种组件间通信的方式,适用于任意组件间通信。通俗理解就是一个定义在所有组件之外的公共x,这个x可以有vm或vc上的同款$on、$off、$emit,也可以让所有组件都访问到。 第一个问题:那怎样添加这个x才…

代码随想录学习Day 18

530.二叉搜索树的最小绝对差 题目链接 讲解链接 思路:利用二叉搜索树的性质,其中序遍历序列是一个有序数组。所以先对二叉搜索树进行中序遍历,得到一个递增的数组后,再遍历整个数组,依次求相邻值的差,最…

java算法汇总(蓝桥常用-->自总版)(更新中...)

这里写目录标题 1.递归求n的阶乘2.互质3.例题:奇妙的数字两个数字拼接String.toCharArray()方法String.valueOf()方法 4.例题:美丽的2String.contains()方法 5.ASCII码---a,A,0的转换6.String[] a---->求sum(a[p].charAt(q))-0;7.复数BigInteger 大整数类型本题用到的方法--…

【SSH配置公钥私钥免密登录】

SSH配置公钥私钥免密登录 SSH的安全机制一、修改远程主机ssh设置二、在windows客户端生成公钥私钥文件三、将客户端公钥追加到远程主机 .ssh/authorized_keys中参考链接 SSH的安全机制 SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的…