算法与数据结构实验7
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(); } 效果图: