算法与数据结构实验7
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法与数据结构(二叉树)实验:
问题:创建一棵如下的树
代码:
//顺序存储结构 -- 树
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//一维数组能够存放的最大结点数
#define MAX_SIZE 255
//定义顺序树类型
typedef char SeqTree[MAX_SIZE];
char a[MAX_SIZE];
/*初始化空二叉树*/
void InitSeqTree(SeqTree tree){
//将字符数组中的每个元素都设置为0字符
for(int i=0;i<MAX_SIZE;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<MAX_SIZE;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<MAX_SIZE;i++)
{
if(tree[i]!='0'&&i+1>(pow(2,depth)-1))
{
depth++;
}
}
/*while((int)pow(2,depth)-1<len)
{
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();
}
效果图: