二叉树顺序结构的基本实现(实验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’来代替。程序中的二叉树类循环数组一次,依次按照相应位置保存字符,相当于保存了数组来构建二叉树。这种写法虽然在算法上没有什么难的,效率也挺高,但是对保存的数组要求高,必须按着格式书写。

四、 总结和心得
在程序实现中并没有什么新颖的地方,中规中矩的实现功能,重复实现输出关系函数,来输出所有关系。一开始学习二叉树那时,并不知道这种数据结构有什么用。在经过一段时间的学习和了解后,二叉树的用途十分多,而且在多门专业课中也有出现。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中通快递三天没更新物流信息怎么办 快递已经到了物流信息不更新怎么办 天天快递查询不更新物流信息怎么办 买车下个月分期全部付清怎么办手续 天猫客服介入以后商家不退款怎么办 淘宝上买代购奢侈品买到假货怎么办 淘宝退货卖家收到货拒绝退款怎么办 没收到货但申请了退货退款怎么办 小米商城预约中德手机没货怎么办 电脑用百度网盘下载速度超慢怎么办 ios网盘下载速度太慢怎么办 小米手机4x卡机了怎么办 小米手机4x屏幕点不动了怎么办 苹果手机连接u盘没反应怎么办 苹果官网储蓄卡分期额度不够怎么办 京东买东西发票信息填写错了怎么办 华为v9手机激活密码忘了怎么办 公司报销发票纸质的丢了怎么办 在京东上买的小天才手表坏了怎么办 美亚买东西过几天降价了怎么办 天猫买东西退款后又不想退了怎么办 自己写错了地址快递被签收了怎么办 在天猫购买东西不发货怎么办 在天猫买了东西不给我发货怎么办 天猫退货卖家收到货不退款怎么办 唯品会的账号找不回来了怎么办 从网上买的沙发物流超级慢怎么办 三星c5手机玩王者荣耀卡怎么办 买手机送话费的卡不想用了怎么办 到银行存钱被骗买保险了怎么办 去银行存钱被骗买了保险怎么办 京东申请退款后卖家又发货了怎么办 苹果6s没有4g网怎么办 花呗分期付款买手机额度不够怎么办 手机天猫不支持购买淘宝商品怎么办 天猫国际购买商品狠盾怎么办 在微信上微拍堂买东西被骗了怎么办 京东自营买到返修手机怎么办? 7p弯了怎么办能修复吗 农商银行app登录密码忘了怎么办 网址上的重庆时时彩不能提现怎么办