数据结构DAY5--二叉树相关流程

news2024/11/24 16:57:36

流程有:创建->遍历->得到信息->销毁 

创建

根据先序遍历的流程以及对叶子结点的左后驱结点和右后驱结点以#号替代的原则,写出一个数组,并建立一个结构体,包括数据域,结构体类型的左后驱结点和右后驱结点指针。

typedef struct tree_node
{
	BTint data;//任意数据类型
	struct tree_node *pl;
	struct tree_node *pr;
}TREE_NODE;

char tree[] = "ABC##EH###DF##G##";

以上述两者为基础,建立函数:初始化一个数据,其值为创建的数组,数组角标为一个全局变量,以便于在树中插入数据,用结构体定义一个指针,大小为结构体大小,使其数据域为数组中的值,左右后驱结点指向函数自身(回调以创造子结点)最后返回该指针结点---当数组数据为#时,直接返回NULL,以结束创建过程。

TREE_NODE *create_Btree()
{
	BTDATA_TYPE data = tree[idx++];
	if (data == '#')
	{
		return NULL;
	}

	TREE_NODE *pnode = malloc(sizeof(TREE_NODE));
	if (NULL == pnode)
	{
		perror("fail malloc");
		return  NULL;
	}
	pnode->data = data;
	pnode->pl = create_Btree();
	pnode->pr = create_Btree();

	return pnode;
}

遍历

前序

输入树,若树指向空则返回(证明从根节点到叶子结点一条线已经遍历完了),打印根结点(数据域),然后以左结点为新的根结点回调自身,再以左结点为新的根结点回调自身,即遍历完毕。

void pre_order(TREE_NODE *proot)
{
	if (NULL == proot)
	{
		return ;
	}
	printf("%c", proot->data);
	pre_order(proot->pl);
	pre_order(proot->pr);
}

中序

void mid_order(TREE_NODE *proot)
{
	if (NULL == proot)
	{
		return ;
	}

	mid_order(proot->pl);
	printf("%c", proot->data);
	mid_order(proot->pr);
}

后序

void pos_order(TREE_NODE *proot)
{
	if (NULL == proot)
	{
		return ;
	}
	
	pos_order(proot->pl);
	pos_order(proot->pr);
	printf("%c", proot->data);
}

遍历以回调函数为主,看似复杂且难以理解,实际步骤很简单,以下以前序遍历为例做过程分析:

1.打印出A->2.以B为新的根结点,回调自身->3.打印B->4.以B为新的根结点,回调自身->

5.打印C->6.以C的左结点为新的根结点,回调自身->7.C的左结点为空,结束6返回上一级

->8.以C的右结点为新的根结点,回调自身->9.C的右结点为空,结束8返回上一级->10.C这一步回调函数运行结束,继续函数4的下一步,以B的右结点D为新的根结点,回调自身->11.与C的过程相同->12.B的函数运行结束,继续函数1的下一步->13.以E为新的根结点,回调自身->14.与C的过程相同->结束函数。

获得二叉树相关信息

获得二叉树的结点个数

传入树根结点,若树的结点为空,则返回0,否则返回1与以自身的左结点为根结点的回调函数与右以自身的右结点为根结点的回调函数,即可获得结点个数,其逻辑与前面遍历类似

int get_tree_node(TREE_NODE *proot)
{
	if (NULL == proot)
	{
		return 0;
	}
	return 1+get_tree_node(proot->pl)+get_tree_node(proot->pr);
}

获得二叉树的层数

其逻辑是获得所有分支的层数,然后通过对比获得最大值,就是二叉树的层数,思想与遍历类似,使用回调函数来实现:首先将根结点输入函数,若函数为空,则返回0,接着以左结点为根结点回调自身,然后以左结点为根结点回调自身,最后返回左右分支中最大的一只,并加上根结点这一层,就是层数

int get_btree_layer_cnt(TREE_NODE *proot)
{
	if (NULL == proot)
	{
		return 0;
	}
	int layL = get_btree_layer_cnt(proot->pl);
	int layR = get_btree_layer_cnt(proot->pr);

	return layL > layR ? layL+1 : layR+1;
}

销毁

与遍历思想类似:只不过是把打印换为了释放空间:

void destroy_btree(TREE_NODE *proot)
{
	if (NULL == proot)
	{
		return ;
	}
	destroy_btree(proot->pl);
	destroy_btree(proot->pr);
	free(proot);
}

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

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

相关文章

【C++核心-基础知识】内存分析和new操作符

内存分析和new操作符 一、内存分析1. 程序运行前就存在的区域1.1 代码区1.2 全局区1.3 代码演示 2. 程序运行后才存在的区域2.1 栈区2.2 堆区 二、new操作符1. 基本介绍2. 代码演示 一、内存分析 C程序在执行时,将内存大方向划分为4个区域: 代码区&…

堆排序及调整算法

调整算法 向上调整: 对大堆向上调整: adujust_up void adjust_up(int* a, int child) {int parent (child - 1) / 2;while (child > 0){if (a[child] > a[parent]){swap(a[child], a[parent]);child parent;parent (child - 1) / 2;}else//默…

有关格式输入输出的问题

对于格式输入输出问题&#xff0c;我们最好用c语言编写代码&#xff01;&#xff01;&#xff01; 成绩统计 难点&#xff1a;格式化输出 #include <cstdio> using namespace std; typedef long long ll;ll n,score,a,b;int main() {//及格>60 优秀>85 求及格率…

脱发治疗2.0时代,植发企业如何找到新发展高地?

“在春天这个万物生长的季节&#xff0c;只有头发在掉”。 脱发已成为现代人日常生活中最大的困扰之一。国家卫健委调查数据显示&#xff0c;我国脱发人口数量已超2.5亿&#xff0c;其中26-30岁人群占比达41.9%&#xff0c;占据脱发人群主流。考虑到快节奏生活的常态化&#x…

取消格式化 SSD磁盘:从格式化 SSD磁盘恢复数据

许多用户认为SSD上删除或格式化的数据就永远消失了。事实上&#xff0c;这是完全错误的。数据恢复软件能够取消格式化SSD或恢复SSD上的数据。在本文中&#xff0c;我们将向您展示一个简单的解决方案&#xff0c;可以从格式化的 SSD 中快速、完整地恢复数据。 格式化 SSD 的原因…

【保姆级讲解Element UI】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

青少年体能素质教育平台

一、项目背景与意义 随着社会的快速发展和人们生活水平的提高&#xff0c;青少年体能素质教育逐渐受到社会各界的广泛关注。体能素质作为青少年全面发展的重要组成部分&#xff0c;对于提升他们的健康水平、增强自信心、培养团队协作精神和创新能力具有重要意义。然而&#xf…

cygwin工具学习记录

文章目录 cygwin工具学习记录主要特点使用场景安装命令使用使用命令行安装命令包的基本步骤&#xff1a;安装apt-cyg&#xff1a;错误处理&#xff1a;错误一&#xff1a;错误二错误三 简单使用 cygwin工具学习记录 Cygwin是一个在Windows操作系统上提供类Unix环境的免费软件工…

tcp early retransmit 和 rack 中神奇的 1/4 minrtt

雨中跑步十公里&#xff0c;沿河看柳&#xff0c;发了一则朋友圈&#xff1a; 为什么采用 1/4 minrtt 作为重传和探测的延时&#xff0c;上图解释的已经很清楚了&#xff0c;主要还是怕乱序&#xff0c;关于乱序的度量&#xff0c;上图解释得非常清楚&#xff0c;乱序预期可在…

蓝桥2021A组E题

回路计数 问题描述格式输入格式输出评测用例规模与约定解析参考程序难度等级 问题描述 格式输入 无 格式输出 输出方案数 评测用例规模与约定 无 解析 题目的意思是21个教学楼对于编号互质的两个楼就有一个通道&#xff0c;可以想成一个图有双向边当编号互质时&#xff0c;…

path环境变量的作用

当我把一个运行文件的路径加入到了path环境变量&#xff0c;就可以在cmd命令行随时使用运行。 在path中有两个path上面的是用户的path&#xff0c;下面的是计算机的path

GD32 HID键盘矩阵键盘发送数据时,一直发送数据问题处理

这个问题找了两三天,开始并不认为是示例程序的问题,只是感觉是自己代码问题。 这个解决流程大概是: 先调好矩阵键盘=> 调用发送函数。 就是因为调用时,一直发送数据,我也在按键抬起做了操作,始终不行。 最后,发现时示例代码中有个 空闲中断 引起的。 udev->reg…

(一)Jetpack Compose 从入门到会写

基本概念 Compose 名称由来 众所周知&#xff0c;继承在功能拓展上表现的很脆弱&#xff0c;容易类、函数爆炸&#xff0c;通过代理和包装进行组合会更健壮。 Compose 意为组合&#xff0c;使用上也是把 Compose 函数以 模拟函数调用层级关系的方式 组合到一起&#xff0c;最终…

数据结构-----Lambda表达式

文章目录 1 背景1.1 Lambda表达式的语法1.2 函数式接口 2 Lambda表达式的基本使用2.1 语法精简 3 变量捕获3.1 匿名内部类3.2 匿名内部类的变量捕获3.3 Lambda的变量捕获 4 Lambda在集合当中的使用4.1 Collection接口4.2 List接口4.3 Map接口 HashMap 的 forEach() 5 总结 1 背…

【愚公系列】2023年12月 HarmonyOS教学课程 041-Stage模型(概述和组件配置)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

2024年第十四届 Mathorcup (A题)| PCI 规划问题 | 混淆矩阵 目标规划 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看Mathorcup (A题&#xff09;&#xff01; CS团队…

VBA_MF系列技术资料1-505

MF系列VBA技术资料1-505 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-0…

halcon 两图叠加 显示

halcon 两图叠加 显示 代码 read_image (Image, E:/test/CameraWeldHead/二号机焊头图片.bmp) read_image (Image1, E:/test/CameraWeldHead/右1.bmp) mirror_image (Image1, ImageMirror, column)crop_part (Image, ImagePart1, 0, 0, 4096, 4096) crop_part (ImageMirror, …

【40分钟速成智能风控9】风控大数据体系

目录 ​编辑 风控大数据体系 数据源类型 征信报告 信息概要 信贷交易信息明细 公共信息明细 查询记录 消费能力 资产状况 基本信息 多头借贷 运营商 地理位置 设备属性 操作行为 风控大数据体系 数据是一切模型的基础&#xff0c;智能风控模型最大的优势&…

js性能优化(五)

第五章开始啦~~~~~~~~~~~~~ 防抖和节流之前自己有学过一次&#xff0c;包括几种方式怎么实现&#xff0c;代码如何写花了两天有写过&#xff0c;这次算是更系统的一个复习加填补 十七、防抖与节流 为什么需要防抖和节流&#xff1a; 在一些高频率事件触发的场景下我们不希望…