算法与数据结构实验7

  • 格式:docx
  • 大小:67.69 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法与数据结构(二叉树)实验:

问题:创建一棵如下的树

代码:

//顺序存储结构 -- 树

#include

#include

#include

#include

//一维数组能够存放的最大结点数

#define MAX_SIZE 255

//定义顺序树类型

typedef char SeqTree[MAX_SIZE];

char a[MAX_SIZE];

/*初始化空二叉树*/

void InitSeqTree(SeqTree tree){

//将字符数组中的每个元素都设置为0字符

for(int i=0;i

{

tree[i]='0';

}

}

//创建完全二叉树:i 为数组中的下标

void CreateSeqTree(SeqTree tree,int i)

{

char ch;

ch=getchar(); A

B C

D E G

F

fflush(stdin);

if(ch=='^')//输入^符号表示结束当前结点的输入

{

tree[i]='0';

return;

}

tree[i]=ch;

//某个结点输入完毕后,还需要让用户输入左孩子和右孩子

printf("左孩子结点: ");

CreateSeqTree(tree,2*i+1);//递归调用

printf("右孩子结点; ");

CreateSeqTree(tree,2*i+2);//递归调用

}

//获取数的根结点元素

char GetSeqTree(SeqTree tree)

{

return tree[0];

}

//获取树的结点总数

int GetSeqTreeLength(SeqTree tree)

{

int len=0;

for(int i=0;i

{

if(tree[i]=='0')

{

continue;

}

len++;

}

return len;

}

//获取树的深度

int GetSeqTreeDepth(SeqTree tree)

{

//性质2:深度为k的二叉树最多有2^k-1结点

int depth=0;

int len=GetSeqTreeLength(tree);

for(int i=0;i

{

if(tree[i]!='0'&&i+1>(pow(2,depth)-1))

{

depth++;

}

}

/*while((int)pow(2,depth)-1

{

depth++;

}*/

return depth;

}

void TestSeqTree()

{

SeqTree tree;

InitSeqTree(tree);

printf("请输入根结点");

CreateSeqTree(tree,0);

for(int i =0;i < 15;i++)

{

printf("%c,",tree[i]);

}

putchar('\n');

printf("总结点数:%d\n",GetSeqTreeLength(tree));

printf("深度:%d\n",GetSeqTreeDepth(tree));

}

void main()

{

TestSeqTree();

}

效果图: