码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的顺序存储结构

时间:2015-04-19 21:28:15      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

/*
 * 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!