实验四——树和二叉树的实验1

本文档详细介绍了实验目的,包括熟练理解树和二叉树的概念,掌握顺序存储结构及其操作。实验内容涉及自定义二叉树的构建,通过顺序结构实现层序输出、结点关系输出及叶子结点信息展示。实验结果分析了存储效率,指出顺序存储结构的有效利用率。在心得体会部分,作者反思了对树和二叉树顺序存储结构的理解,并分享了在实现层序遍历时的经验和挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
using namespace std;  
const int MaxSize=100; //树最大规模为100 
class Tree  
{  
private:  
    char data[MaxSize]; //用数组存放数据 
    int length;  //记录树大小
public:  
    Tree(char a[],int n);  //有参构造函数实现数据存储
    ~Tree(){}  
    void Leveroder();//层序输出    
    void Parch();//输出结点的双亲、孩子信息  
    void Leaf();//输出叶子信息  
};  
Tree::Tree(char a[],int n)  
{  
    if(n>MaxSize||n<1) throw"错误";  //排除溢出问题
    for(int i=0;i<n;i++)    //实现数据的存储
        data[i]=a[i];  
    length=n;  
}  
void Tree::Leveroder()  //层序遍历函数实现
{  
    for(int i=0;i<length;i++)  
    {  
		if(data[i]!='#')  //为"#"(虚结点)时,表示无数据
            cout<<data[i];  //结点不为虚结点标识时依次输出数据
    }  
}  
void Tree::Parch() //输出结点的双亲和孩子结点信息 
{  
    int c1,c2,b;  
    for(int i=1;i<=length;i++)  
    {  
        c1=2*i;//左孩子  
        c2=2*i+1;//右孩子  
        b=i/2;//双亲  
		if(data[i-1]!='#') //排除空结点,且规定"#"为空结点 
        {  
            if(b>=1)  //排除结点i无双亲
                cout<<"结点"<<i<<"\t双亲为:"<<data[b-1]<<"   ";  
            else  
                cout<<"结点"<<i<<"\t无双亲"<<"   ";  
			if(data[c1-1]!='#'&&c1<=length)   //最后一层叶子结点是无孩子的 
                cout<<"\t左孩子为:"<<data[c1-1]<<"   ";  
            else  
                cout<<"\t无左孩子"<<"   ";  
			if(data[c2-1]!='#'&&c2<=length)  
                cout<<"\t右孩子为:"<<data[c2-1]<<"   ";  
            else  
                cout<<"\t无右孩子";  
            cout<<endl;  
        }  
    }  
}  
void Tree::Leaf() //输出叶子信息 
{  
    int c1,c2;  
    for(int i=1;i<=length;i++)  
    {  
        c1=2*i;  
        c2=2*i+1;   
		if(data[c1-1]=='#'&&data[c2-1]=='#'&&data[i-1]!='#')  //最后一层即叶子满足:既没有左孩子和右孩子,且该结点不为空
            cout<<data[i-1];  
		if(c1>length&&data[i-1]!='#')  
            cout<<data[i-1];  
    }  
}  
void main()  
{  
	char b[9]={'A','B','C','D','#','E','F','#','G'};  
    Tree c(b,9);  
    cout<<"该二叉树的层序输出为:";  
    c.Leveroder();  
    cout<<endl;   
    c.Parch();  
    cout<<endl;  
    cout<<"叶子结点信息为:";  
    c.Leaf();  
    cout<<endl;
}  

 

一、实验目的:

1、   熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值