/* * 2015年4月19日 16:44:48 * 目的:用顺序存储结构来表示二叉树 * 二叉树比较难,所以更应该同过程序来好好理解二叉树的概念。 * 顺序存储是顺序储存在数组中的,以完全二叉树的形式,不存在的结点 * 在数组中用0表示。当二叉树是完全二叉树时,效率高而且简单 * 但是当不是完全二叉树时,会出现内存浪费的情况,这个程序仅仅 * 用来说明顺序结构怎么存储二叉树的,而且一般二叉树不会用顺序结构,缺点明显 */ # include <stdio.h> # define MAXSIZE 50 //设置二叉树最大结点数 int treeData[MAXSIZE]; //定义一个存储结点的数组 int length; //数组中除了首元素外,因为首元素表示了结点的个数,真正元素的个数,包括0;0表示二叉树不存在的结点. void init() { treeData[0] = 0; //用数组的第一个元素来表示中结点的个数 length = 0; } //判断树是否为空 bool isEmpty() { if(treeData[0] == 0) return true; else return false; } //自己创建一个二叉树 void createTree() { printf("请根据二叉树的特点输入数据,二叉树中不存在的结点请用0表示!\n想要结束请输入-1\n"); int number = 0; //当用户输入-1表示结束 while(number != -1) { scanf("%d",&number); if(number!=-1) { length++; treeData[length] = number; if(number != 0) treeData[0]++; //结点个数+1 } if(length+1 >= MAXSIZE) { printf("数组越界了!\n"); break; //跳出循环 } } } //打印出二叉树 void showTree() { if(isEmpty()) { printf("树中没有元素,无法显示!"); } else { for(int i = 1;i <= length;i++) { printf("%d ",treeData[i]); if(i % 10 == 0) printf("\n"); } printf("\n"); } } void getpointLength() { printf("二叉树中结点的个数为%d\n",treeData[0]); } /* 这个程序本身写的很简单 * 但是这个程序却让我知道了怎么用顺序结构来存储二叉树 * 还有用顺序结构存储一般二叉树,为什么不赞成使用这种方法 * 原因大家应该很清楚,会浪费太多内存空间了. */ int main(void) { init(); createTree(); showTree(); getpointLength(); return 0; }
时间: 2024-10-10 16:49:28