实验5:二叉树的顺序存储实验
来源:互联网 发布:为什么淘宝卖家不回话 编辑:程序博客网 时间:2024/05/17 04:28
一、实验目的
1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;
2、 掌握树的顺序结构的实现;
3、 学会运用树的知识解决实际问题
二、 实验内容
自己确定一个二叉树(树结点类型、数目和结构自定)利用顺序结构方法存储。实现树的构造,并完成:
1)层序输出结点数据;
2)以合理的格式,输出各个结点和双亲、孩子结点信息;
3)输出所有的叶子结点信息;
4)分析你的算法对于给定的二叉树的存储效率。
1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;
2、 掌握树的顺序结构的实现;
3、 学会运用树的知识解决实际问题
二、 实验内容
自己确定一个二叉树(树结点类型、数目和结构自定)利用顺序结构方法存储。实现树的构造,并完成:
1)层序输出结点数据;
2)以合理的格式,输出各个结点和双亲、孩子结点信息;
3)输出所有的叶子结点信息;
4)分析你的算法对于给定的二叉树的存储效率。
源代码如下:
#include<iostream>#include<math.h>using namespace std;const int max=100;template <class T>class SeqTree{public:SeqTree();void CreateTree();void LeverOrder();void Message(int d);void Leaves();private:T bt[max];int number,order;};template <class T>SeqTree<T>::SeqTree(){number=0;order=0;for(int i=0;i<max;i++) bt[i]='0';}template <class T>void SeqTree<T>::CreateTree(){cout<<"请输入树的各个结点数据(结点输入#为空,输入e结束):";T n='#';while(n!='e'){cin>>n;if(n!='e'){if(n!='#') number++; bt[order++]=n;}}}template <class T>void SeqTree<T>::LeverOrder(){if(number==0) throw"空树";for(int i=0;i<order;i++){if(bt[i]!='#') cout<<bt[i]<<" ";}cout<<endl<<endl;}template <class T>void SeqTree<T>::Message(int d){if(d<0||d>order) throw"溢出";else{if(bt[d]!='#'){cout<<"该结点的数据为:"<<bt[d]<<endl;if(d!=0) cout<<"该结点的双亲为:"<<bt[(d-1)/2]<<endl;else cout<<"该结点为根,无双亲"<<endl;cout<<"左孩子:"<<bt[d*2+1]<<"\t右孩子:"<<bt[(d+1)*2]<<endl<<endl;}else cout<<"该结点为空!"<<endl<<endl;}}template <class T>void SeqTree<T>::Leaves(){if(number==0) throw"空树";cout<<"叶子结点为:";for(int i=0;i<=order;i++){if(bt[i]!='0') {if(bt[i*2+1]=='0' && bt[(i+1)*2]=='0') cout<<bt[i]<<" ";}}cout<<endl<<endl;}int main(){int f=1,a,i; SeqTree<char> s; cout<<"\t 二叉树的顺序存储"<<endl;cout<<"\t******* 1.建立二叉树 *****"<<endl;cout<<"\t******* 2.层序输出 *******"<<endl;cout<<"\t******* 3.结点信息 *******"<<endl;cout<<"\t******* 4.叶子结点 *******"<<endl;cout<<endl<<endl;while(f){cout<<"\t请选择[1-5]:";cin>>a;cout<<endl;switch(a){case 1: {s.CreateTree();cout<<endl;break;}case 2:{s.LeverOrder();break;}case 3:{cout<<"请输入您要查询的结点:";cin>>i;s.Message(i-1);break;}case 4:{s.Leaves();break;}case 5:{ f=0;cout<<"欢迎再次使用!"<<endl;break;}default:{cout<<"不存在该命令!"<<endl; break;}}}return 0;}运行结果如下:
阅读全文
0 0
- 实验5:二叉树的顺序存储实验
- 5.1 二叉树的顺序存储实验
- 数据结构|二叉树的顺序存储(实验4.1)
- 数据库实验(五):二叉树的顺序存储
- 5.2 二叉树的链式存储实验
- 二叉树顺序结构的基本实现(实验5.1)
- 实验五 树和二叉树的实验1 树的顺序结构的实现
- 二叉树实验5
- [数据结构]实验五_顺序二叉树
- 数据结构实验一 线性表的顺序存储实验
- 实验5:树和二叉树的实验1
- 实验5:树和二叉树的实验1
- 实验5:树和二叉树的实验1
- 实验5:树和二叉树的实验1
- 实验5:树和二叉树的实验1
- 线性表的顺序存储实验程序
- 数据结构|二叉树的链式存储(实验6.2)
- 5.1数组存储二叉树实验
- 你充满电了吗?——互动(笔记)
- 【我的Java笔记】常用类_BigInteger
- 新的开始
- 拯救雅典娜——倒序动态规划
- 文章标题
- 实验5:二叉树的顺序存储实验
- [TOOL]Atom的简介及安装
- Kotlin中找不到kotlinx解决方法
- ES6语法学习(一):class(2)
- gcc/g++使用大全
- 简单!!!!kindeditor隐藏上传图片框网络图片或本地上传的功能
- ubuntu使用xopen软件
- 陶哲轩实分析 3.4
- 实体类数据类型 String类数据 插入或查询oracle 数据库中字段类型为CLOB的字段