/*二叉树顺序存储结构一般仅适合于存储完全二叉树*/
#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语言实现)——顺序存储结构相关推荐

  1. c语言采用顺序存储结构存储串,试编写算法实现串的置换操作,串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版...

    习题集解析部分 第4章 串 --<数据结构题集>-严蔚敏.吴伟民版 源码使用说明  链接☛☛☛<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 课本源码合 ...

  2. 二叉树介绍 ~ 概念、存储结构、性质

    二叉树介绍 ~ 概念.存储结构.性质 1.二叉树的概念 2.特殊二叉树 3.二叉树的存储结构 4.二叉树的性质 5.相关案例 1.二叉树的概念 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由 ...

  3. 数据结构(C语言版)——二叉树的顺序存储结构(代码版)

    一.代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math. ...

  4. C语言手写二叉树(链式存储结构)

    C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...

  5. 《数据结构》c语言版学习笔记——线性表的顺序存储结构

    线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...

  6. 理论基础 —— 二叉树 —— 顺序存储结构

    [顺序存储结构] 二叉树的顺序存储结构是用一维数组存储二叉树中的结点,并用结点的存储位置表示结点间的逻辑关系(父子关系) 由于二叉树本身不具有顺序关系,因此二叉树的顺序存储结构要解决的关键问题是如何利 ...

  7. c语言实现顺序存储程序,线性表的顺序存储结构动态态分配C语言实现

    线性表的顺序存储结构动态态分配C语言实现 线性表的顺序存储结构动态态分配C语言实现 初始化执行期间通过malloc函数为数组申请空间,程序运行期间若空间不够可通过realloc函数在保留原存储值的前提 ...

  8. C语言实现顺序表(顺序存储结构)

    顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...

  9. 图的顺序存储结构(包含C语言实现)

    使用图结构表示的数据元素之间虽然具有"多对多"的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图. 使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一 ...

最新文章

  1. jvm六:主动使用(1.new一个对象, 2.反射)
  2. Qt-ros插件:创建工程,编译实现操控小乌龟(二)
  3. VTK:Utilities之AnimationScene
  4. 使用Log4j - Java异常处理
  5. 【BZOJ1188】分裂游戏(博弈论)
  6. CF1486D Max Median
  7. MySQL 如何使用 PV 和 PVC?
  8. 【Kalman】卡尔曼滤波Matlab简单实现
  9. https报文 完整_报文 HTTP HTTPS
  10. 手机开机后android,手机开机后出现Android字样然后就自动关机了
  11. 英雄联盟一直连接服务器win10,win10上玩英雄联盟无法连接服务器是怎么回事
  12. Egret引擎基础教程I(下载安装创建第一个项目)
  13. 好玩的centos代码简介()
  14. excel将一个工作表根据条件拆分成多个工作表图文教程
  15. Java版1-50内素数(质数)和
  16. excel表格多行空白,让空白行临近上方的数据自动填充到空白行
  17. windows找不到共享文件怎么解决
  18. android 新闻应用、Xposed模块、酷炫的加载动画、下载模块、九宫格控件等源码
  19. 精确的目标检测中定位置信度的获取
  20. 网络安全面试指南(CybersecurityInterviewGuide)

热门文章

  1. C#/.Net工程师技能树
  2. Ubuntu18.04外接显示屏配置问题
  3. ASW3642 HDMI切换器|HDMI 二进一出方案|HDMI 2:1切换
  4. 选购笔记本电脑的三招半式
  5. matlab 广义积分,matlab求积分(超详细,含int integral integral2/3 quad trapz
  6. PaddleVideo使用自己的数据集训练pp-tsm
  7. 【美少女】腾讯CSIG三面
  8. 【西南大学】考研初试复试资料分享
  9. pyecharts生成各种图表
  10. 51单片机c语言复位程序,51单片机如何实现软件复位系统(C语言),谢谢