实验五 二叉树的实现

时间:2021-05-20 17:26:55

 

实验五 二叉树的实现

一.实验目的

1.掌握二叉树的逻辑结构;

2.掌握二叉树的二叉链表存储结构;

3.验证二叉树的二叉链表存储及遍历操作。

二.问题描述

1.建立一棵含有n个结点的二叉树,采用二叉链表存储;

2.输出前序、中序和后序遍历该二叉树的遍历结果。

三.实验提示

本实验假定二叉树的数据元素为char型,要求学生将实验程序调试通过后,用模板类改写;加入层序遍历二叉树等基本操作。

 四.实验环境

PC微机

DOS操作系统或Windows操作系统

Turbo C程序集成环境或Visual C++程序集成环境

五.实验步骤及结果

1)新建一个头文件Bitree.h,该头文件包括二叉链表的结点结构、二叉链表类Bitree的定义,

#ifndef BiTree_H

#define BiTree_H

struct BiNode

{

      char data;

      BiNode*lchild,*rchild;

};

class BiTree

{

public:

      BiTree(){root=Creat(root);}

      ~BiTree(){Release(root);}

      void PreOrder(){PreOrder(root);}

      void InOrder(){InOrder(root);}

      void PostOrder(){PostOrder(root);}

private:

      BiNode*root;

      BiNode*Creat(BiNode*bt);

      void Release(BiNode*bt);

      void PreOrder(BiNode*bt);

      void InOrder(BiNode*bt);

      void PostOrder(BiNode*bt);

};

#endif 

 

2)新建一个源工程文件Bitree.cpp,该文件包括类BiTree中成员函数的定义:

#include <iostream>

using namespace std;

#include "Bitree.h"

BiNode*BiTree::Creat(BiNode*bt)

{

      char ch;

      cout<<"请输入创建一棵二叉树的结点数据"<<endl;

      cin>>ch;

      if(ch=='#')return NULL;

      else{

             bt=new BiNode;

             bt->data=ch;

             bt->lchild=Creat(bt->lchild);

             bt->rchild=Creat(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 <<" ";

      }

}

3)新建一个源文件Bitree_main.cpp,该文件包括主函数:

#include<iostream>

using namespace std;

#include"Bitree.h"

int main()

{

      BiTree T;

      cout<<"------前序遍历------"<<endl;

      T.PreOrder ();

      cout<<endl;

      cout<<"------中序遍历------"<<endl;

      T.InOrder ();

      cout<<endl;

      cout<<"------后序遍历------"<<endl;

      T.PostOrder ();

      cout<<endl;

      return 0;

}

运行结果:

 

 

六.实验小结

问题1.多次试验老是运行不出来,原因还没弄懂。

解决操作:输入左右子树和空格键。

例如:输入A #  B  #  #

问题2.:如图:

 

解决操作如下图:在if(bt==NULL)return;中少了一个符号=

重新运行程序,得到数据

总结:一个小小的疏忽,就能导致整个程序运行部出来。编程要做到步步仔细小心!