《数据结构》实验5


实验目的

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

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

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

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

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

实验内容

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


1.头文件:Bitree.h

#ifndef Bitree_h
#define Bitree_h
template<class T>
struct BTnode
{
 T data;
 BTnode<T>*lchild, *rchild;
};
template<class T>
class Bitree
{
public:
 Bitree(){ root = create(root); }
 ~Bitree(){ release(root); }
 void preorder(){ preorder(root); }
 void inorder(){ inorder(root); }
 void postorder(){ postorder(root); }
private:
 BTnode<T> *root;
 BTnode<T> *create(BTnode<T>*bt);
 void release(BTnode<T>*bt);
 void preorder(BTnode<T>*bt);
 void inorder(BTnode<T>*bt);
 void postorder(BTnode<T>*bt);
};
template<class T>
BTnode<T> *Bitree<T>::create(BTnode<T> *bt)  //构造函数
{
 char ch;
 cout << "输入创建二叉树的结点数据:";
 cin >> ch;
 if (ch == '#' || ch == '*') return NULL;
 else
 {
  bt = new BTnode<T>;
  bt->data = ch;
  bt->lchild = create(bt->lchild);
  bt->rchild = create(bt->rchild);
 }
 return bt;
}

template<class T>
void Bitree<T>::preorder(BTnode<T> *bt)//前序遍历
{
 if (bt == NULL) return;
 else
 {
  cout << bt->data;
  preorder(bt->lchild);
  preorder(bt->rchild);
 }
}
template<class T>
void Bitree<T>::inorder(BTnode<T> *bt) //中序遍历
{
 if (bt == NULL) return;
 else
 {
  inorder(bt->lchild);
  cout << bt->data;
  inorder(bt->rchild);
 }
}
template<class T>
void Bitree<T>::postorder(BTnode<T> *bt)  //后序遍历
{
 if (bt == NULL) return;
 else
 {
  postorder(bt->lchild);
  postorder(bt->rchild);
  cout << bt->data;
 }
}
template < class T >
void Bitree<T>::release(BTnode<T> *bt)  //析构函数
{
 if (bt != NULL)
 {
  release(bt->lchild);
  release(bt->rchild);
  delete bt;
 }
}
#endif

2.源文件.cpp

#include<iostream>
#include"Bitree.h"
#include<stdlib.h>
using namespace std;
int main()
{
 cout << "创建一棵二叉树:" << endl;
 Bitree<char> T;
 int choose = 0;
 system("pause");
 system("cls");
 while (1)
 {
  cout << "(1).前序遍历" << endl;
  cout << "(2).中序遍历" << endl;
  cout << "(3).后序遍历" << endl;
  cout << "(0).退出" << endl;
  cout << "请输入相应的功能编号:";
  cin >> choose;
  if (choose == 0) break;
  switch (choose)
  {
  case 1:
   cout << "前序遍历的结果是:";
   T.preorder();
   cout << endl;
   break;
  case 2:
   cout << "中序遍历的结果是:";
   T.inorder();
   cout << endl;
   break;
  case 3:
   cout << "后序遍历的结果是:";
   T.postorder();
   cout << endl; break;
  default:
   break;
  }
 }
 system("pause");
 return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值