实验要求:
- 输入一个完全二叉树的层次遍历字符串,创建这个二叉树,输出这个二叉树的前序遍历字符串、中序遍历字符串、后序遍历字符串、结点数目、二叉树高度(上述每一个结果独立一行显示)。
- 输入二叉树前序序列和中序序列(各元素各不相同),创建这个二叉树,输出该二叉树的后序序列、层次遍历。
(输出格式如下图所示)
实验难点:
- 输出格式控制(在下面的解法中运用一个全局变量commaFlag来控制逗号输出);
- 根据题目需求选择二叉树的描述方式,并制定二叉树类(下面的解法选择的是二叉树的链式描述,而且二叉树类中只包含必要的函数);
- 从层次序列构建二叉树,从前序序列和中序序列构建二叉树也是难点。
//my solution
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#define stringLength 50
using namespace std;
//CommaFlag is used to judge whether a comma should be printed.
int commaFlag;
//linked binary tree
template<class T>
struct binaryTreeNode
{
T element;
binaryTreeNode<T>* leftChild, * rightChild;
binaryTreeNode() {
leftChild = NULL; rightChild = NULL; }
binaryTreeNode(const T& theElement)
{
element = theElement;
leftChild = NULL;
rightChild = NULL;
}
binaryTreeNode(const T& theElement, binaryTreeNode<T>* theLC, binaryTreeNode<T>* theRC)
{
element = theElement;
leftChild = theLC;
rightChild = theRC;
}
};
template<class T>
class binaryTree
{
public:
//construct,destruct,copy_constrcut
binaryTree() {
root = NULL; treeSize = 0; }
binaryTree(binaryTreeNode<T>* r, int size) {
root = r; treeSize = size; }
~binaryTree() {
clear(); }
//preorder,inorder,postorder,levelordr,size,height
void preOrder() const {
preOrder(root); }//前序遍历
void inOrder() const {
inOrder(root); }//中序遍历
void postOrder() const {
postOrder(root); }//后序遍历
void levelOrder() const;//层次遍历
void visit