问题描述与解题思路与我之前用C语言写过的博客一模一样,这里这不过是用面向对象的思想以C++语言的方式再次呈现一遍。
C语言版本:点击打开链接
https://blog.csdn.net/y_16041527/article/details/79835727
So......这里直接上C++的完整代码
注意:这里采用多文件编程、不要将BinaryTree.h头文件和ExpTFTree.cpp文件按照前后顺序直接放到一起,会导致编译错误,分开放。
头文件声明:
//BinaryTree.h
#include <iostream>
const int MaxSize = 100;
using namespace std;
//链式二叉树节点的抽象数据类型定义
template <class T>
class BinaryTreeNode
{
public:
T data; //数据域
BinaryTreeNode<T> *left, *right; //指向二叉树节点的指针
BinaryTreeNode() {} //无参构造函数
BinaryTreeNode(const T d, BinaryTreeNode<T> *l = NULL, BinaryTreeNode<T> *r = NULL)
:data(d), left(l), right(r) {} //给定数据域和指针域的构造函数
};
//表达式二叉树的抽象数据类型定义
template <class T>
class ExpTFTree:public BinaryTreeNode<T>
{
public:
BinaryTreeNode<T> *root; //二叉树根节点
T s[MaxSize]; //存储表达式的数组
public:
ExpTFTree() { root = NULL; } //构造函数
~ExpTFTree() //析构函数
{
DeleteExpTFTree(root);
cout << "释放成功" << endl;
}
void PerCreateTree(); //前缀表达式建树
void PostCreateTree(); //后缀表达式建树过程
BinaryTreeNode<T>* InCreateTree(T s[], int i, int j); //中缀表达式建树过程
void DispTree(BinaryTreeNode<T> *root); //凹入表示法输出一棵二叉树
void PerOrder(BinaryTreeNode<T> *root); //前序周游给定二叉树
void InOrder(BinaryTreeNode<T> *root); //中序周游
void PostOrder(BinaryTreeNode<T> *root); //后序周游
void DeleteExpTFTree(BinaryTreeNode<T> *root); //删除给定的二叉树
};
Cpp文件
//ExpTFTree.cpp - 表达式二叉树
#include "stdafx.h"
#include "BinaryTree.h"
#include <string.h>
using namespace std;
//ExpTFTree类相关成员函数的实现
//删除给定的二叉树
template <class T>
void ExpTFTree<T>::DeleteExpTFTree(BinaryTreeNode<T> *root)
{
if (root)
{
DeleteExpTFTree(root->left)