标签:
/*
* 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;
}标签:
原文地址:http://blog.csdn.net/u011257298/article/details/45131891