c语言二叉树的分类,数据结构C语言版 二叉树的顺序存储表示和实现.doc

您所在位置:网站首页 > 海量文档

&nbsp>&nbsp计算机&nbsp>&nbsp数据结构与算法

7e3e25dd1884ce9b7725a69a698d5758.gif

数据结构C语言版 二叉树的顺序存储表示和实现.doc12页

本文档一共被下载:2377011b61454b208b34ad77b4c31088.gif次,您可全文免费在线阅读后下载本文档。

072ad097814a33d1ad18e33ca14a5a9e.png

9ec2792a743ebdf4575ee09a03c275ea.png

7af312d1be2cfc1e59f15880bb7a7e7a.png

5f207613e329ca76dc87c76d3ff77e64.png

adf7aa3071c520b8a2063089f549261c.png

下载提示

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

2.该文档所得收入(下载+内容+预览三)归上传者、原创者。

3.登录后可充值,立即自动返金币,充值渠道很便利

数据结构C语言版 二叉树的顺序存储表示和实现.txt丶︶ ̄喜欢的歌,静静的听,喜欢的人,远远的看我笑了当初你不挺傲的吗现在您这是又玩哪出呢?/*

数据结构C语言版 二叉树的顺序存储表示和实现

P126

编译环境:Dev-C++ 4.9.9.2

日期:2011年2月13日

*/

#include

typedef char TElemType;

// 二叉树的顺序存储表示

#define MAX_TREE_SIZE 100 // 二叉树的最大结点数

typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0号单元存储根结点

typedef struct

{

int level,//结点的层

order;//本层序号(按满二叉树计算)

}position;

typedef int QElemType;

// 队列的顺序存储结构(可用于循环队列和非循环队列)

#define MAXQSIZE 5 // 最大队列长度(对于循环队列,最大队列长度要减1)

typedef struct

{

QElemType *base; // 初始化的动态分配存储空间 相当于一个数组

int front; // 头指针,若队列不空,指向队列头元素,相当于一个数组下标

int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置

// 相当于一个数组下标

}SqQueue;

#define ClearBiTree InitBiTree // 在顺序存储结构中,两函数完全一样

TElemType Nil = ' '; // 设空为字符型的空格符

// 构造空二叉树T。因为T是固定数组,不会改变,故不需要&

int InitBiTree(SqBiTree T)

{

int i;

for(i=0;i

T[i]=Nil; // 初值为空

return 1;

}

void DestroyBiTree()

{

// 由于SqBiTree是定长类型,无法销毁

}

// 按层序次序输入二叉树中结点的值(字符型或整型), 构造顺序存储的二叉树T

int CreateBiTree(SqBiTree T)

{

int i = 0, l;

char s[MAX_TREE_SIZE];

printf("请按层序输入结点的值(字符),空格表示空结点,结点数≤%d:\n",

MAX_TREE_SIZE);

printf("例如:abcefgh\n");

gets(s);// 输入字符串

l = strlen(s);// 求字符串的长度

for(;i

{

T[i]=s[i];

// 此结点(不空)无双亲且不是根,T[(i+1)/2-1] == Nil表示T[i]无双亲

if(i!=0 && T[(i+1)/2-1] == Nil && T[i] != Nil)

{

printf("出现无双亲的非根结点%c\n",T[i]);

exit(0);

}

}

for(i=l;i

T[i]=Nil;

return 1;

}

// 若T为空二叉树,则返回1,否则0

int BiTreeEmpty(SqBiTree T)

{

if(T[0]==Nil) // 根结点为空,则树空

return 1;

else

return 0;

}

// 返回T的深度

int BiTreeDepth(SqBiTree T)

{

int i,j=-1;

for(i=MAX_TREE_SIZE-1;i>=0;i--) // 找到最后一个结点

if(T[i] != Nil)

break;

i++; // 为了便于计算

do

j++;

while(i>=pow(2,j));//i > pow(2, depth-1) && i <= pow(2, depth)

return j;//j = depth;

}

// 当T不空,用e返回T的根,返回1;否则返回0,e无定义

int Root(SqBiTree T,TElemType *e)

{

if(BiTreeEmpty(T)) // T空

return 0;

else

{

*e=T[0];

return 1;

}

}

// 返回处于位置e(层,本层序号)的结点的值

TElemType Value(SqBiTree T,positio

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名:

验证码:

c9f2bced460b0329ba0aadbbc3f0fc71.png

匿名?

发表评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值