二叉树的顺序存储结构------(C语言实现)

上图所示的二叉树用顺序存储方式存为

结点ABCDE0F
下标0123456


以A结点为例:相当于一个一维数组啦

设A结点下标为i时

A的左子树下标为2*i +1,B就是 2*0+1 = 1

A的右子树下标为2*(i +1),C就是 2*(0+1) = 2

想必大家也发现了,这很容易造成内存的浪费

如上图只有A,B,D结点的话

AB0D0000

下面是代码实现:

//定义二叉树的最大结点数
#define MAX_SIZE 255

//下标为0的位置存储根结点
typedef Element SqBinTree[MAX_SIZE];

SqBinTree tree;

#include <stdio.h>
#include <stdlib.h>

//定义二叉树的最大结点数
#define MAX_SIZE 255

//下标为0的位置存储根结点
typedef char SeqBinTree[MAX_SIZE];//可以参考我写的文章 (c语言中的typedef) 

//初始化 
void InitTree(SeqBinTree tree);

//创建二叉树
void CreatSeqtree(SeqBinTree tree,int index);

//打印二叉树
void PrintSeqtree(SeqBinTree tree); 

int main(void) 
{
	SeqBinTree tree;
	InitTree(tree);
	CreatSeqtree(tree,0);
	PrintSeqtree(tree);
	return 0;
}

void InitTree(SeqBinTree tree)
{
	//将字符数组中的每个元素的设置为空
	 int i;
	 for(i=0;i<MAX_SIZE;i++)
	 {
	 	tree[i] = '\0';
	 }
}

//创建二叉树
void CreatSeqtree(SeqBinTree tree,int index)
{
	char ch;
	printf("请输入根结点:\n");
	ch = getchar();
	fflush(stdin);//清空缓冲区
	if(ch == '^')
	{
		tree[index]='\0';
		return;
	}
	tree[index] = ch;
	//某个结点输入完毕后,还需要让用户输入左孩子和右孩子
	printf("输入左孩子结点:\n");
	CreatSeqtree(tree,2*index+1);
	printf("输入右孩子结点:\n");
	CreatSeqtree(tree,2*(index+1));
	
}

//打印二叉树
void PrintSeqtree(SeqBinTree tree)
{
	int i;
	for(i=0;i<15;i++)//随便打印十五个看看 
	{
		printf("%c ",tree[i]); 
	} 
}

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值