树的操作

#include<algorithm>
using namespace std;
int n=0;
template <class Datatype>
struct Node
{
    Datatype data;
    Node <Datatype> *lchild,*rchild;
};
template <class Datatype>
class tree
{
    public:
        tree(){root=created(root);}
        ~tree(){release(root);}
        void preorder(){preorder(root);}
        void inorder(){inorder(root);}
        void postorder(){postorder(root);}
        void levelorder(Node <Datatype> *root);
        void jiedian(Node <Datatype> *root);
        int yezijiedian(Node <Datatype> *root);
        int shendu(Node <Datatype> *root);
        Node <Datatype> *getroot();
    private:
        Node <Datatype> *root;
        Node <Datatype> *created(Node <Datatype> *bt);
        void release(Node <Datatype> *bt);
        void preorder(Node <Datatype> *bt);
        void inorder(Node <Datatype> *bt);
        void postorder(Node <Datatype> *bt);
};
template <class Datatype>
Node <Datatype> * tree <Datatype>::getroot()
{
    return root;
}
template <class Datatype>
Node <Datatype> * tree <Datatype>::created(Node <Datatype> *bt)
{
    Datatype ch;
    cin>>ch;
    if(ch=='#')
    {
        bt=NULL;
    }
    else
    {
        bt=new Node <Datatype>;
        bt->data=ch;
        bt->lchild=created(bt->lchild);
        bt->rchild=created(bt->rchild);
    }
    return bt;
}
template <class Datatype>
void tree <Datatype>::preorder(Node <Datatype> *bt)
{
    if(bt==NULL)
    {
        return;
    }
    else
    {
        cout<<bt->data<<' ';
        preorder(bt->lchild);
        preorder(bt->rchild);
    }
}
template <class Datatype>
void tree <Datatype>::inorder(Node <Datatype> *bt)
{
    if(bt==NULL)
    {
        return;
    }
    else
    {
        inorder(bt->lchild);
        cout<<bt->data<<' ';
        inorder(bt->rchild);
    }
}
template <class Datatype>
void tree <Datatype>::postorder(Node <Datatype> *bt)
{
    if(bt==NULL)
    {
        return;
    }
    else
    {
        postorder(bt->lchild);
        postorder(bt->rchild);
        cout<<bt->data<<' ';
    }
}
template <class Datatype>
void tree <Datatype>::levelorder(Node <Datatype> *root)
{
    int front1=-1,rear=-1;
    Node <Datatype> *Q[101];
    Node <Datatype> *q;
    if(root==NULL)
    {
        return;
    }
    Q[++rear]=root;
    while(front1!=rear)
    {
        q=Q[++front1];
        cout<<q->data<<' ';
        if(q->lchild!=NULL) Q[++rear]=q->lchild;
        if(q->rchild!=NULL) Q[++rear]=q->rchild;
    }
}
template <class Datatype>
void tree <Datatype>::release(Node <Datatype> *bt)
{
    if(bt!=NULL)
    {
        release(bt->lchild);
        release(bt->rchild);
        delete bt;
    }
}
template <class Datatype>
void tree <Datatype>::jiedian(Node <Datatype> *root)
{
    if(root!=NULL)
    {
        jiedian(root->lchild);
        n++;
        jiedian(root->rchild);
    }
}
template <class Datatype>
int tree <Datatype>::yezijiedian(Node <Datatype> *root)
{
    if(root==NULL)
    {
        return 0;
    }
	if(root->lchild==NULL&&root->rchild==NULL)
    {
        return 1;
    }
	return yezijiedian(root->lchild)+yezijiedian(root->rchild);
}
template <class Datatype>
int tree <Datatype>::shendu(Node <Datatype> *root)
{
    if(root==NULL)
    {
        return 0;
    }
    else
    {
        int hl=shendu(root->lchild);
        int hr=shendu(root->rchild);
        return hl>hr?hl+1:hr+1;
    }
}
int main()
{
     tree <char> T;
     cout<<"树的前序遍历:";
     T.preorder();
     cout<<endl;
     cout<<"树的中序遍历:";
     T.inorder();
     cout<<endl;
     cout<<"树的后序遍历:";
     T.postorder();
     cout<<endl;
     cout<<"树的层序遍历:";
     T.levelorder(T.getroot());
     cout<<endl;
     cout<<"树的结点个数为:";
     T.jiedian(T.getroot());
     cout<<n<<endl;
     cout<<"树的叶子结点的个数为:";
     cout<<T.yezijiedian(T.getroot())<<endl;
     cout<<"树的深度为:";
     cout<<T.shendu(T.getroot())<<endl;
     return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
08-10
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值