实验五 树与二叉树实验一

实验 5:树和二叉树的实验 1 

一、实验目的 1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现; 2、 掌握树的顺序结构的实现; 3、 学会运用树的知识解决实际问题 

二、 实验内容 自己确定一个二叉树(树结点类型、数目和结构自定)利用顺序结构方法存储。实 现树的构造,并完成: 1) 层序输出结点数据; 2) 以合理的格式,输出各个结点和双亲、孩子结点信息; 3) 输出所有的叶子结点信息; 4)分析你的算法对于给定的二叉树的存储效率。 

三、实验步骤 1、依据实验内容,先确定具体的二叉树,并说明结点的数据据类型; 2、设计具体的算法; 3、写出完整程序; 4、总结、运行结果和分析算法效率。 5、总体收获和不足,疑问等。 四、实验要求 1、 按照数据结构实验任务书,提前做好实验预#include<iostream.h>
const int MaxSize=20;
class tree
{
public:
tree(char a[],int n);//构造输入结点信息
void printall();//层序输出数据
void printpc();//输出结点双亲孩子
void printle();//输出叶子
private:
char point[MaxSize];
int length;
};


tree::tree(char a[],int n)
{
if(n>MaxSize||n<=0)throw"错误";
for(int i=0;i<n;i++)
{point[i]=a[i];}
length=n;
}


void tree::printall()
{
for(int i=0;i<length;i++)
{
if(point[i]!='#')
{cout<<point[i];}
}
}


void tree::printpc() 
{    
    int c1,c2,b;    
    for(int i=1;i<=length;i++)    
    {    
        c1=2*i;   
        c2=2*i+1;    
        b=i/2;    
        if(point[i-1]!='#') 
        {    
            if(b>=1)
                cout<<"结点"<<point[i-1]<<"\t双亲为:"<<point[b-1]<<"   ";    
            else    
                cout<<"结点"<<point[i-1]<<"\t无双亲"<<"   ";    
            if(point[c1-1]!='#'&&c1<=length)  
                cout<<"\t左孩子为:"<<point[c1-1]<<"   ";    
            else    
                cout<<"\t无左孩子"<<"   ";    
            if(point[c2-1]!='#'&&c2<=length)    
                cout<<"\t右孩子为:"<<point[c2-1]<<"   ";    
            else    
                cout<<"\t无右孩子";    
            cout<<endl;    
        }    
    }    
}    


void tree::printle()
{    
    int c1,c2;    
    for(int i=1;i<=length;i++)    
    {    
        c1=2*i;    
        c2=2*i+1;     
        if(point[c1-1]=='#'&&point[c2-1]=='#'&&point[i-1]!='#')  
            cout<<point[i-1];    
        if(c1>length&&point[i-1]!='#')    
            cout<<point[i-1];    
    }    
}    


int main()
{
char a[MaxSize]={'A','B','C','D','#','E','F','#','G','#','#','H'};
tree t(a,12);
cout<<"该树层序输出:"<<endl;
t.printall();
cout<<endl;
cout<<"结点的的双亲和孩子:"<<endl;
t.printpc();
cout<<endl;
cout<<"该树叶子结点:"<<endl;
t.printle();
cout<<endl;
return 0;
}


猜你喜欢

转载自blog.csdn.net/sendyxu/article/details/80709514