二叉树(C语言实现)——顺序存储结构
/*二叉树顺序存储结构一般仅适合于存储完全二叉树*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
#define MaxSize 100
typedef char DataType;
typedef struct
{DataType data[MaxSize]; // 存储树结点的数组 int BiTreeNum; // 二叉树的结点个数 }SqBiTree;void Init_BiTree(SqBiTree * T); // 初始化
void Creat_BiTree(SqBiTree * T, int n); // 创建树
DataType Root_BiTree(SqBiTree * T); // 获取根结点
int Count_BiTree(SqBiTree * T); // 获取树的结点数
int Depth_BiTree(SqBiTree * T); // 获取树的深度
void Print_BiTree(SqBiTree * T); // 打印二叉树的结点
void PreOrder_Traverse(SqBiTree * T,int n); // 先序遍历二叉树
void InOrder_Traverse(SqBiTree * T, int n); // 中序遍历二叉树
void PostOrder_Traverse(SqBiTree * T, int n);// 后序遍历二叉树
void Level_Traverse(SqBiTree * T, int n); // 层序遍历二叉树
bool Destroy_BiTree(SqBiTree * T); // 销毁二叉树 int main()
{SqBiTree T;Init_BiTree(&T);printf("请输入根结点(输入#表示该结点为空):"); Creat_BiTree(&T,1);printf("打印二叉树:");Print_BiTree(&T);printf("\n");printf("根结点:%c\n",Root_BiTree(&T));printf("结点数:%d\n", Count_BiTree(&T));printf("深度:%d\n",Depth_BiTree(&T));printf("打印二叉树:");Print_BiTree(&T);printf("\n");printf("先序遍历:");PreOrder_Traverse(&T,1);printf("\n");printf("中序遍历:");InOrder_Traverse(&T,1);printf("\n");printf("后序遍历:");PostOrder_Traverse(&T,1);printf("\n");printf("层序遍历:");Level_Traverse(&T, 1);printf("\n");if(Destroy_BiTree(&T))printf("销毁成功!\n");elseprintf("销毁失败!\n");printf("打印二叉树:");Print_BiTree(&T);printf("\n");return 0;
} void Init_BiTree(SqBiTree * T)
{int i;for(i=0; i<MaxSize; ++i) // 清除所用内存空间的杂乱数据 {T->data[i] = '\0';}T->BiTreeNum = 0; return;
}void Creat_BiTree(SqBiTree* T, int n)
{char ch;fflush(stdin);scanf("%c",&ch);if(ch == '#'){return;}else{T->data[n] = ch;T->BiTreeNum++;printf("%c的左子树:",ch);Creat_BiTree(T, 2*n);printf("%c的右子树:",ch);Creat_BiTree(T,(2*n+1));}
}DataType Root_BiTree(SqBiTree * T)
{return T->data[1];
}int Count_BiTree(SqBiTree * T)
{if(T->BiTreeNum == 0)return 0;elsereturn T->BiTreeNum;}int Depth_BiTree(SqBiTree * T)
{if(!T)return 0;int k;pow(2,k) - 1 == T->BiTreeNum;return k;
}void Print_BiTree(SqBiTree * T)
{int i;for(i=1; i<=T->BiTreeNum; ++i){if(T->data[i] != '\0') printf("%3c",T->data[i]);}printf("\n");
}void PreOrder_Traverse(SqBiTree * T, int n)
{if(T->data[n] == '\0')return;else{printf("%3c",T->data[n]);PreOrder_Traverse(T, 2*n);PreOrder_Traverse(T, (2*n+1));}
} void InOrder_Traverse(SqBiTree * T, int n)
{if(T->data[n] == '\0')return;else{InOrder_Traverse(T, 2*n);printf("%3c",T->data[n]);InOrder_Traverse(T, (2*n+1));}
}void PostOrder_Traverse(SqBiTree * T, int n)
{if(T->data[n] == '\0')return;else{PostOrder_Traverse(T, 2*n);PostOrder_Traverse(T, (2*n+1));printf("%3c",T->data[n]);}
}void Level_Traverse(SqBiTree * T, int n)
{int i;for(i=n; i<=T->BiTreeNum; ++i)printf("%3c",T->data[i]);
}bool Destroy_BiTree(SqBiTree * T)
{T->BiTreeNum = 0;return true;
}
二叉树(C语言实现)——顺序存储结构相关推荐
- c语言采用顺序存储结构存储串,试编写算法实现串的置换操作,串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版...
习题集解析部分 第4章 串 --<数据结构题集>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 课本源码合 ...
- 二叉树介绍 ~ 概念、存储结构、性质
二叉树介绍 ~ 概念.存储结构.性质 1.二叉树的概念 2.特殊二叉树 3.二叉树的存储结构 4.二叉树的性质 5.相关案例 1.二叉树的概念 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由 ...
- 数据结构(C语言版)——二叉树的顺序存储结构(代码版)
一.代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math. ...
- C语言手写二叉树(链式存储结构)
C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...
- 《数据结构》c语言版学习笔记——线性表的顺序存储结构
线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...
- 理论基础 —— 二叉树 —— 顺序存储结构
[顺序存储结构] 二叉树的顺序存储结构是用一维数组存储二叉树中的结点,并用结点的存储位置表示结点间的逻辑关系(父子关系) 由于二叉树本身不具有顺序关系,因此二叉树的顺序存储结构要解决的关键问题是如何利 ...
- c语言实现顺序存储程序,线性表的顺序存储结构动态态分配C语言实现
线性表的顺序存储结构动态态分配C语言实现 线性表的顺序存储结构动态态分配C语言实现 初始化执行期间通过malloc函数为数组申请空间,程序运行期间若空间不够可通过realloc函数在保留原存储值的前提 ...
- C语言实现顺序表(顺序存储结构)
顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...
- 图的顺序存储结构(包含C语言实现)
使用图结构表示的数据元素之间虽然具有"多对多"的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图. 使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一 ...
最新文章
- jvm六:主动使用(1.new一个对象, 2.反射)
- Qt-ros插件:创建工程,编译实现操控小乌龟(二)
- VTK:Utilities之AnimationScene
- 使用Log4j - Java异常处理
- 【BZOJ1188】分裂游戏(博弈论)
- CF1486D Max Median
- MySQL 如何使用 PV 和 PVC?
- 【Kalman】卡尔曼滤波Matlab简单实现
- https报文 完整_报文 HTTP HTTPS
- 手机开机后android,手机开机后出现Android字样然后就自动关机了
- 英雄联盟一直连接服务器win10,win10上玩英雄联盟无法连接服务器是怎么回事
- Egret引擎基础教程I(下载安装创建第一个项目)
- 好玩的centos代码简介()
- excel将一个工作表根据条件拆分成多个工作表图文教程
- Java版1-50内素数(质数)和
- excel表格多行空白,让空白行临近上方的数据自动填充到空白行
- windows找不到共享文件怎么解决
- android 新闻应用、Xposed模块、酷炫的加载动画、下载模块、九宫格控件等源码
- 精确的目标检测中定位置信度的获取
- 网络安全面试指南(CybersecurityInterviewGuide)
热门文章
- C#/.Net工程师技能树
- Ubuntu18.04外接显示屏配置问题
- ASW3642 HDMI切换器|HDMI 二进一出方案|HDMI 2:1切换
- 选购笔记本电脑的三招半式
- matlab 广义积分,matlab求积分(超详细,含int integral integral2/3 quad trapz
- PaddleVideo使用自己的数据集训练pp-tsm
- 【美少女】腾讯CSIG三面
- 【西南大学】考研初试复试资料分享
- pyecharts生成各种图表
- 51单片机c语言复位程序,51单片机如何实现软件复位系统(C语言),谢谢