实验四 树和二叉树实验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/nika_jy_L/article/details/80721786
今日推荐