【数据结构】——二叉树的遍历算法

题目要求

编写程序,用先序递归遍历法(或输入先序及中序递归遍历结点访问序列)建立二叉树的二叉链表存储结构,计算并输出二叉树的结点总数以及树的高度;然后输出其先序、中序、后序以及层次遍历结点访问次序。其中层次遍历的实现需使用循环队列。二叉树结点数据类型建议选用字符类型。

数据结构设计

采用C++的模板类,创建队列。每个队列对象中,elem指针用来建立长度为n的数组,n表示队列的容量,front表示队头指针,rear表示队尾指针,c表示队列中当前元素的个数。

采用结构体建立二叉树,其中,data表示数据域,lchild表示左指针,rchild表示右指针,BiT表示二叉树结构体指针类型变量,BiTNode表示二叉树结构体类型变量。

算法设计简要描述

1. 先序遍历建立二叉树:递归调用函数,不断读取字符,依次建立左子树和右子树,当读取到‘#’字符时,返回NULL指针,最终返回根结点指针。

2. 先序和中序遍历结点访问序列建立二叉树:

a. 先由先序序列求得根节点;

b. 再由根节点在中序序列中的位置,知:它之前的访问的结点为其左子树结点,它之后访问的为其右子树结点;

c. 递归应用a,b两条。

程序代码

#include 
#include 
using namespace std;
typedef char ElemTp;
#define MAX 20
template 
class Queue                         //模板类:队列
{
public:
	Queue();                        //默认构造函数
	Queue(int n);                   //构造函数,调用函数createQueue(int n),创建长度为n的队列
	~Queue();                       //虚构函数
	int createQueue(int n);         //创建长度为n的队列
	int empty();                    //判断队列是否为空
	int full();                     //判断队列是否为满
	int enQueue(T e);               //元素e入队
	int dlQueue(T &e);              //元素出队,保存在e中
private:
	T *elem;        

你可能感兴趣的:(数据结构,二叉树,队列,数据结构,算法,c++)