二叉树顺序结构的基本实现(实验5.1)
来源:互联网 发布:oracle java 证书 编辑:程序博客网 时间:2024/05/22 12:34
一、实验目的
熟练掌握二叉树的结构特点,掌握二叉树的顺序存储和实现。
二、实验内容
1.用C++的模板来实现顺序队列,下面是代码:
main.cpp
#include<iostream>using namespace std;const int MaxSize=100;class Binarytree {private: void printR(int x, int y); char data[MaxSize]; int length;public: Binarytree(char a[], int n); ~Binarytree(){} void Leveroder(); // 层序输出 void search(int i); // 查询结点i的双亲、孩子 void Parch(); // 输出双亲、孩子信息 void Leaf(); // 输出叶子信息};Binarytree::Binarytree(char a[],int n) { if(n > MaxSize || n < 1) throw "参数非法"; for(int i = 0;i < n; i++) data[i] = a[i]; length = n;}void Binarytree::search(int x) { int count = 1; for (int i = 1; i <= length; i++) { if (data[i-1] != '\0') { if (count == x) { printR(i, x); return; } else { count++; } } }}void Binarytree::printR(int x, int y) { int left = 2 * x; int right = 2 * x + 1; int p = x / 2; if (data[x-1] != '\0') { if(p >= 1) cout << "结点" << y << ":" << data[x-1] << "\t双亲" << data[p-1] <<" "; else cout << "结点" << y << ":" << data[x-1] << "\t无双亲" <<" "; if(data[left-1] != '\0' && left <= length) cout << "\t左孩子" << data[left-1] << " "; else cout << "\t无左孩子" << " "; if(data[right-1] != '\0' && right <= length) cout<< "\t右孩子" << data[right-1]; else cout<< "\t无右孩子"; cout << endl; }}void Binarytree::Leveroder() { for(int i = 0; i < length; i++) { if(data[i] != '\0') cout << data[i]; }}void Binarytree::Parch() { for(int i = 1; i <= length; i++) { search(i); }}void Binarytree::Leaf() { int a1,a2; for(int i = 1; i <= length; i++) { a1 = 2 * i; a2 = 2 * i + 1; if(data[a1-1] == '\0' && data[a2-1] == '\0' && data[i-1] != '\0') cout << data[i-1]; if(a1 > length && data[i-1] != '\0') cout << data[i-1]; }}int main(int argc, const char * argv[]) { char b[13] = {'A','B','C','D','\0','E','F','\0','G','\0','\0','\0','\0'}; Binarytree c(b,13); cout << "该二叉树的层序输出为:"; c.Leveroder(); cout << endl; cout << "输出所有关系:" << endl; c.Parch(); cout << endl; cout << "叶子结点为:"; c.Leaf(); cout << endl; return 0;}
控制台输出如下:
三、分析存储效率
这个demo的存储二叉树方法是是直接输入了一个层序遍历的数组,二叉树没有结点的地方使用’\0’来代替。程序中的二叉树类循环数组一次,依次按照相应位置保存字符,相当于保存了数组来构建二叉树。这种写法虽然在算法上没有什么难的,效率也挺高,但是对保存的数组要求高,必须按着格式书写。
四、 总结和心得
在程序实现中并没有什么新颖的地方,中规中矩的实现功能,重复实现输出关系函数,来输出所有关系。一开始学习二叉树那时,并不知道这种数据结构有什么用。在经过一段时间的学习和了解后,二叉树的用途十分多,而且在多门专业课中也有出现。
阅读全文
0 0
- 二叉树顺序结构的基本实现(实验5.1)
- 实验五 树和二叉树的实验1 树的顺序结构的实现
- 5.1 二叉树的顺序存储实验
- 二叉树顺序结构实现
- 二叉树顺序结构实现
- 二叉树的顺序存储结构的C++实现
- 顺序结构实现二叉树的建立和各种遍历
- 二叉树的顺序结构C语言实现
- 实验四 二叉树基本操作的实现
- 【数据结构】二叉树顺序结构实现_BiTreeArray
- 二叉树顺序结构实现/链式结构实现
- 二叉树的基本结构以及java实现
- java 实现二叉树结构的基本运算详细代码
- 二叉树--顺序结构
- 二叉树顺序结构
- 实验5:二叉树的顺序存储实验
- 数据结构实验2(二叉链表实现二叉树的基本运算)
- 二叉树的顺序实现
- TabLayout的一些特殊用法
- echarts修改图元大小无效的解决方案
- 基于HMM的中文分词模型实现
- Linux进程间通信 —— 信号灯
- 解决NDK版本过低不能自动编译JNI的问题
- 二叉树顺序结构的基本实现(实验5.1)
- gperftools
- 简单说 JavaScript中的事件委托(下)
- Nginx的安装配置
- oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen
- WordPress版微信小程序2.6版发布
- Unity不点击按钮执行按钮点击事件
- 2018年java进阶需要关注的公众号
- R语言:变量名称和字符串的转换