树和二叉树实验

来源:互联网 发布:查看linux版本命令 编辑:程序博客网 时间:2024/05/22 00:55
实验五:   树和二叉树实验


一..实验目的
     巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。
1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二.实验时间
   准备时间为第10周到第12前半周,具体集中实验时间为12周周四。2个学时。

三..实验内容

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

#include<iostream>using namespace std;struct BiNode  {      char data;      BiNode* lchild, * rchild;  };    class BiTree{  public:      BiTree(){root=create(root);}      ~BiTree(){release(root);}      void PreOrder(){PreOrder(root);}      void InOrder(){InOrder(root);}      void PostOrder(){PostOrder(root);}  private:      BiNode *root;      BiNode *create(BiNode *bt);      void release(BiNode *bt);      void PreOrder(BiNode *bt);      void InOrder(BiNode *bt);      void PostOrder(BiNode *bt);  };  BiNode *BiTree::create(BiNode *bt)  {      char ch;      cout<<"请输入创建一棵二叉树的结点数据:"<<endl;      cin>>ch;      if(ch=='#')return NULL;      else{          bt=new BiNode;          bt->data=ch;          bt->lchild=create(bt->lchild);          bt->rchild=create(bt->rchild);      }      return bt;  }      void BiTree::release(BiNode *bt)  {      if(bt!=NULL)      {          release(bt->lchild);          release(bt->rchild);          delete bt;      }  }      void BiTree::PreOrder(BiNode *bt)  {         if(bt==NULL)return;      else      {          cout<<bt->data<<" ";          PreOrder(bt->lchild);          PreOrder(bt->rchild);      }  }      void BiTree::InOrder(BiNode *bt)  {      if(bt==NULL)return;      else      {          InOrder(bt->lchild);          cout<<bt->data<<" ";          InOrder(bt->rchild);      }  }      void BiTree::PostOrder(BiNode *bt)  {      if(bt==NULL)return;      else      {          PostOrder(bt->lchild);          PostOrder(bt->rchild);          cout<<bt->data<<" ";      }  }  int main()  {      BiTree T;      cout<<"create a tree !"<<endl;      cout<<"----------前序遍历-----------"<<endl;      T.PreOrder();      cout<<endl;      cout<<"----------中序遍历-----------"<<endl;      T.InOrder();      cout<<endl;      cout<<"----------后序遍历-----------"<<endl;      T.PostOrder();      cout<<endl;      return 0;  }  



0 0