实验五:树和二叉树实验——信管1134--05

来源:互联网 发布:qq怎么设置mac在线最新 编辑:程序博客网 时间:2024/05/16 00:41

《数据结构》实验五:   树和二叉树实验

一..实验目的

     巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。

1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。

2.学习树的相关知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。

二.实验时间

   准备时间为第10周到第12前半周,具体集中实验时间为12周周四。2个学时。

三..实验内容

1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。

2.写程序判定出六枚硬币中的一枚假硬币。参照课本P136页8枚硬币的判定方法。

3. 自己确定2n(大小自己确定)个同学参加学校羽毛球淘汰比赛,请定程序,存放各队员比赛结果,并根据结果确定冠亚军。全

 第一题是必做题,第二题和第三题选做题。选做并做对者每题奖励5分。

四.参考资料

    实验教材P207到218


#include<iostream>  using namespace std;    template <class datatype>  struct BI  {      datatype data;      BI<datatype>* lchild;      BI<datatype>* rchild;  };    template <class datatype>  class tree  {  public:      tree(){root=create(root);}      ~tree(){release(root);}      void preorder(){preorder1(root);}      void inorder(){inorder1(root);}      void postorder(){postorder1(root);}      void leverorder();      int depth1(BI<datatype>*bt);      BI<datatype>*root;      BI<datatype>*create(BI<datatype>*bt);      void release(BI<datatype>*bt);      void preorder1(BI<datatype>*bt);      void inorder1(BI<datatype>*bt);      void postorder1(BI<datatype>*bt);        };    template <class datatype>  BI<datatype>* tree<datatype>::create(BI<datatype>*bt)  {      datatype ch;      cin>>ch;      if(ch=='#')bt=NULL;      else{          bt=new BI<datatype>;          bt->data=ch;          bt->lchild=create(bt->lchild);          bt->rchild=create(bt->rchild);      }      return bt;  }  template <class datatype>  void tree<datatype> :: release(BI<datatype>*bt)  {      if(bt!=NULL)      {          release(bt->lchild);          release(bt->rchild);          delete bt;      }  }  template <class datatype>  void tree<datatype>::preorder1(BI<datatype>*bt)  {      if(bt==NULL)return;      else{          cout<<bt->data<<" ";          preorder1(bt->lchild);          preorder1(bt->rchild);      }  }  template <class datatype>  void tree<datatype>::inorder1(BI<datatype>*bt)  {      if(bt==NULL)return;      else{          inorder1(bt->lchild);          cout<<bt->data<<" ";          inorder1(bt->rchild);      }  }  template <class datatype>  void tree<datatype>::postorder1(BI<datatype>*bt)  {      if(bt==NULL)return;      else{          postorder1(bt->lchild);          postorder1(bt->rchild);          cout<<bt->data<<" ";      }  }  template <class datatype>  void tree<datatype>::leverorder()  {      int front,rear;      BI<datatype>*Q[100];      front=rear=-1;      if(root==NULL)return;      Q[++rear]=root;      while(front!=rear)      {          BI<datatype>* q;          q=Q[++front];          cout<<q->data<<" ";          if(q->lchild!=NULL)Q[++rear]=q->lchild;          if(q->rchild!=NULL)Q[++rear]=q->rchild;      }  }  template <class datatype>  int tree<datatype>::depth1(BI<datatype>*bt)  {      int hl,hr,max;       if(bt)      {          hl=depth1(bt->lchild);          hr=depth1(bt->rchild);          max=hl>hr?hl:hr;          return max+1;      }      else return 0;  }    void main()  {      cout<<"请构造一个二叉树:"<<endl;      tree<char> t1;      cout<<endl<<"——前序遍历——"<<endl;      t1.preorder();      cout<<endl<<"——中序遍历——"<<endl;      t1.inorder();      cout<<endl<<"——后序遍历——"<<endl;      t1.postorder();      cout<<endl<<"——层次遍历——"<<endl;      t1.leverorder();      cout<<endl<<"二叉树深度为:"<<endl<<t1.depth1(t1.root)<<endl;  }  



0 0
原创粉丝点击