数据结构之树

1. 遍历 

b站收藏夹

2. 二叉树的存储

2.1 顺序存储

Linear_Tree.c

不推荐使用,因为会造成空间浪费

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include<stdbool.h>
typedef bool status;

#define MAXSIZE 3

//二叉树的顺序存储
struct B_Tree
{
	char tree[MAXSIZE];	
};
//创建二叉树的顺序存储
struct B_Tree *Tree_Create()
{
	struct B_Tree *tree1=(struct B_Tree *)malloc(sizeof(struct B_Tree));
	if(tree1==NULL)
	{
		return false;
	}
	memset(tree1->tree,0,sizeof(tree1->tree));
	return tree1;
}	
//插入	
void  Tree_Insert(struct B_Tree *T ,char  data)
{
	for(int i=0; i<MAXSIZE;i++)
	{
		if(T->tree[i]==0)
		{
			T->tree[i]=data;
			break;
		}
	}
}
//遍历
void Tree_Travel(struct B_Tree *T )
{
	for(int i=0; i<MAXSIZE;i++)
	{
		if(T->tree[i]=='#')
		{
			continue;
		}
		printf("二叉树中的结点:%c\n",T->tree[i]);
	}
}
int  main()
{
	struct B_Tree *T=Tree_Create();
	Tree_Insert(T,'a');
	Tree_Insert(T,'b');
	Tree_Insert(T,'#');	
	Tree_Travel(T);
	return 0;
}

2.2 链式存储           

2.2.1 普通方法创建

Linear_Tree_list.c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

struct Tree
{
	char data;
	struct Tree *LChild;
	struct Tree *RChild;
};
struct Tree *Tree_Create(char data)
{
	struct Tree*T=(struct Tree *)malloc(sizeof(struct Tree));
	if(T==NULL)
	{
		return NULL;
	}
	T->data=data;
	T->LChild=NULL;
	T->RChild=NULL;
	return T;
}
int main()
{
	//非递归创建二叉树
	struct Tree *T1=Tree_Create(10);
	struct Tree *T2=Tree_Create(20);
	T1->LChild=T2;
	
	return 0;
}







2.2.2 递归创建

List_Tree_DiGui.c
#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
typedef bool status;


//二叉树的链式存储--递归创建
struct Tree
{
	char data;
	struct Tree *LChild;
	struct Tree *RChild;
};
//创建二叉树
struct Tree *Tree_Create()
{
	struct Tree *T;
	char in_ch;//获取用户输入的字符
	scanf("%c",&in_ch);
	if(in_ch=='#')
	{
		return NULL;
	}
	T=(struct Tree *)malloc(sizeof(struct Tree));
	if(T==NULL)
	{
		printf("结点空间申请失败,创建失败!\n");
		return NULL;
	}
	T->data=in_ch;
	T->LChild=Tree_Create();
	T->RChild=Tree_Create();
	return T;
}
//先序遍历
status begin_Travel(struct Tree *T)
{
	if(T==NULL)
	{
		return false;
	}
	printf("%c",T->data);
	begin_Travel(T->LChild);
	begin_Travel(T->RChild);
	return true;
}
//中序遍历
status mid_Travel(struct Tree *T)
{
	if(T==NULL)
	{
		return false;
	}
	mid_Travel(T->LChild);
	printf("%c",T->data);
	mid_Travel(T->RChild);
	return true;
}
//后序遍历
status back_Travel(struct Tree *T)
{
	if(T==NULL)
	{
		return false;
	}
	back_Travel(T->LChild);
	back_Travel(T->RChild);
	printf("%c",T->data);
	return true;
}
int main()
{
	struct Tree *tree=Tree_Create();
	printf("先序遍历:\n");
	begin_Travel(tree);
	printf("\n");
	printf("中序遍历:\n");
	mid_Travel(tree);
	printf("\n");
	printf("后序遍历:\n");
	back_Travel(tree);
	printf("\n");
}




输入abc###c##

结果

3. 哈夫曼树

4. 图

4.1 顺序存储

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

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

相关文章

【NSX-T】7. 搭建NSX-T环境 —— 部署和配置 Edge Cluster

目录 7. 部署和配置 Edge Cluster7.1 配置 Edge 节点&#xff08;1&#xff09;Name and Description&#xff08;2&#xff09;Credentials&#xff08;3&#xff09;Configure Deployment&#xff08;4&#xff09;Configure Node Settings&#xff08;5&#xff09;Configur…

RS485数据采集网关如何采集传感器、仪器仪表数据?

在工业自动化和数据采集领域&#xff0c;RS485作为一种常见的通信接口&#xff0c;被广泛应用于连接传感器、仪器仪表等设备。为了满足对这些设备数据的采集和处理需求&#xff0c;RS485数据采集网关应运而生。本文将围绕“RS485数据采集网关如何采集传感器、仪器仪表数据&…

说说对React高阶组件的理解?应用场景?

面试官&#xff1a;说说对高阶组件的理解&#xff1f;应用场景? 一、是什么 高阶函数&#xff08;Higher-order function&#xff09;&#xff0c;至少满足下列一个条件的函数 接受一个或多个函数作为输入输出一个函数 在React中&#xff0c;高阶组件即接受一个或多个组件作…

C# WPF上位机开发(键盘绘图控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在软件开发中&#xff0c;如果存在canvas图像的话&#xff0c;一般有几种控制方法。一种是鼠标控制&#xff1b;一种是键盘控制&#xff1b;还有一…

玄关柜和鞋柜是一回事吗?福州中宅装饰,福州装修

玄关柜和鞋柜虽然都用于存放鞋子&#xff0c;但它们在概念上有所不同。玄关柜是一个更大的概念&#xff0c;它包括鞋柜和其他功能区域&#xff0c;可以说鞋柜是玄关柜的一部分。 1️⃣概念上的不同 玄关柜是一种集成了鞋柜、挂衣架、换鞋凳等多种功能于一体的家居家具&#xf…

忘记了路由器的用户名和密码,怎么办?

注意&#xff1a;登录窗口会显示路由器型号&#xff0c;请务必确认是您自己路由器的界面。 解决方法 尝试输入登录密码 如果您的确忘了设置好的密码&#xff0c;就只能把路由器恢复出厂设置&#xff0c;没有超级密码。 恢复出厂前&#xff0c;不妨尝试输入可能的管理密码。一…

【STM32】USART串口协议

1 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 USRT&#xff1a;TX是数据发送引脚&#xff0c;RX是数据接受引脚&#xff1b; I2C&#xf…

数字孪生因何备受青睐?

数字孪生&#xff08;Digital Twin&#xff09;作为一个概念&#xff0c;正在不断引起各行各业的关注和迅速发展。它是一种将物理实体或系统与其数字化虚拟模型相结合的技术&#xff0c;为企业和组织提供了全新的可能性。下面我就以可视化设计从业者的角度来进行简单探讨。 数字…

坚鹏:美国智库认为中国在70%战略产业里领先,美国正迅速衰落

【重榜】2023年12月13日&#xff0c;美国智库信息技术与创新基金会&#xff08;ITIF&#xff09;发布重榜报告&#xff0c;认为中国在70%战略产业里领先&#xff0c;美国正迅速衰落。美国智库ITIF认为在计算机和电子产品、化工品、机器设备、机动车、基本金属、金属制品、电气设…

19.(vue3.x+vite)v-if和v-for哪个优先级更高

前端技术社区总目录(订阅之前请先查看该博客) v-if和v-for哪个优先级更高 (1)实践中不应该把v-for和v-if放一起,可以包一层template (2)在vue2中,v-for的优先级是高于v-if (3)在vue3中,v-for的优先级是低于v-if 组件代码 <template><div><!--包一…

React受控组件和非受控组件的理解?应用场景?

面试官&#xff1a;说说对受控组件和非受控组件的理解&#xff1f;应用场景&#xff1f; 一、受控组件 受控组件&#xff0c;简单来讲&#xff0c;就是受我们控制的组件&#xff0c;组件的状态全程响应外部数据 举个简单的例子&#xff1a; class TestComponent extends Rea…

arp欺骗原理以及实现方式

我们知道了arp的作用&#xff0c;那么此时我们怎么可以用他来进行攻击呢&#xff1f;在一个局域网中&#xff0c;我们怎么实现呢&#xff1f; 原理&#xff1a; 这样B就可以做到中间人了&#xff0c;可以接受到两个主机的数据了。换句话来说&#xff0c;在同一个局域网内&…

STM32 PVD掉电检测功能的使用方法

STM32 PVD掉电检测功能的使用方法 前言 在实际应用场景中&#xff0c;可能会出现设备电源电压异常下降或掉电的情况&#xff0c;因此&#xff0c;有时候需要检测设备是否掉电&#xff0c;或者在设备掉电的瞬间做一些紧急关机处理&#xff0c;比如保存重要的用户数据&#xff…

gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架

背景介绍 gRPC 是一种现代开源高性能远程过程调用 &#xff08;RPC&#xff09; 可以在任何环境中运行的框架。它可以有效地连接服务 在数据中心内和数据中心之间&#xff0c;具有对负载平衡、跟踪、 运行状况检查和身份验证。它也适用于最后一英里 分布式计算&#xff0c;用于…

qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景

qt-C笔记之addAction和addMenu的区别以及QAction的使用场景 code review! 文章目录 qt-C笔记之addAction和addMenu的区别以及QAction的使用场景1.QMenu和QMenuBar的关系与区别2.addMenu和addAction的使用场景区别3.将QAction的信号连接到槽函数4.QAction的使用场景5.将例1修改…

新能源汽车生产污废水需要哪些工艺及设备

新能源汽车的快速发展带来了许多环境问题&#xff0c;其中之一就是生产过程中产生的污废水。由于新能源汽车的生产过程与传统汽车有所不同&#xff0c;因此需要采用特定的工艺和设备来处理和处理这些废水。 首先&#xff0c;新能源汽车生产过程中产生的污废水主要来自洗涤和冷却…

【稳定检索|投稿优惠】2024年机电控制系统与机械工程国际会议(ICMECSME 2024)

2024年机电控制系统与机械工程国际会议(ICMECSME 2024) 2024 International Conference on Mechanical and Electrical Control Systems and Mechanical Engineering(ICMECSME) 一、【会议简介】 2024年智慧交通与城市建设工程国际会议(ICSTUCE 2024)将在中国广州盛大开幕。这场…

C语言——字符函数和字符串函数(二)

&#x1f4dd;前言&#xff1a; 上一篇文章C语言——字符函数和字符串函数&#xff08;一&#xff09;对字符函数和字符串函数strlen&#xff0c;strcpy和strncpy&#xff0c;strcat和strncat进行了初步的讲解 这篇文章主要再讲解几个我们常用到的其他字符串函数&#xff08;附…

2023-12-14 二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数

二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数 104. 二叉树的最大深度 思想&#xff1a;可以使用迭代法或者递归&#xff01;使用递归更好&#xff0c;帮助理解递归思路&#xff01;明确递归三部曲–①确定参数以及返回参数 ②递归结束条件 ③单层逻辑是怎么样…

JavaWeb项目中已经导入依赖却报错依赖不存在

问题描述 在使用 Maven Servlet Tomcat 来搭建 JavaWeb 项目时&#xff0c;在 pom.xml 中正确引入了依赖&#xff0c;编码过程中也能够正常使用。但是在启动 Tomcat 之后&#xff08;启动时或启动后&#xff09;&#xff0c;却报错显示该依赖不存在。 可能原因 pom.xml 的…