算法与数据结构实验7
- 格式:docx
- 大小:67.69 KB
- 文档页数:3
算法与数据结构(二叉树)实验:
问题:创建一棵如下的树
代码:
//顺序存储结构 -- 树
#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(); } 效果图: