表达式类型的实现(二叉树)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表达式类型的实现
一、需求分析:
1、输入时按相关提示进行输入。
2、输出的形式,输出时按相关功能进行输出。
3、功能,实现前缀表达式转换为中缀表达式,并进行相应的求值和赋值运算,与及构
造复合表达式。
4、测试数据,见输出结果。
二、概要设计:
实现该程序所要用到的函数:
三、详细设计:
见源码:
1、Expression.h文件的实现
#ifndef _EXPRESSION_H_
#define _EXPRESSION_H_
//-------------------- 树节点类
class TreeNode
{
public:
TreeNode(char _data,TreeNode* _left,TreeNode* _right);
~TreeNode();
char GetData();
void SetData(char _data);
void SetLeft(TreeNode* _left);
void SetRight(TreeNode* _right);
TreeNode* GetLeft();
TreeNode* GetRight();
private:
char Data;
TreeNode* left,*right;
};
//-------------------- 二叉树几及表达式类
class BinaryTreeAndExpr
{
public:
BinaryTreeAndExpr();
~BinaryTreeAndExpr();
TreeNode* GetRoot();
void SetRoot(TreeNode* _root);
void ReadExpr(char* E);
void WriteExpr(char* E);
void Assign(char v,int c);
static int Value(char* E);
static BinaryTreeAndExpr* CompoundExpr(char p,char* E1,char* E2);
void Release();
private:
void ReleaseRecursion(TreeNode* &p);
void ReadExprRecursion(TreeNode* &p,char* E);
void WriteExprRecursion(TreeNode* p,char* E);
void AssignRecursion(TreeNode* p,char v,int c);
int ValueRecursion(TreeNode* p);
int Priority(char c1,char c2);
bool IsOperator(char c);
int Evaluation(int a,char op,int b);
TreeNode* root;
int Expr_i,Expr_len;
};
#endif
2、Expression.cpp文件的实现
#include
#include
#include"Expression.h"
using namespace std;
//----------------------树节点类成员函数
TreeNode::TreeNode(char _data,TreeNode* _left,TreeNode* _right) {
Data=_data;
left=_left;
right=_right;
}
TreeNode::~TreeNode()
{
}
char TreeNode::GetData()
{
return Data;
}
void TreeNode::SetLeft(TreeNode* _left)
{
left=_left;
}
void TreeNode::SetRight(TreeNode* _right)
{
right=_right;
}
TreeNode* TreeNode::GetLeft()
{
return left;
}
TreeNode* TreeNode::GetRight()
{
return right;
}
void TreeNode::SetData(char _data)
{
Data=_data;
}
//---------------------------- 二叉树几及表达式类成员函数BinaryTreeAndExpr::BinaryTreeAndExpr():root(NULL)
{
Expr_i=Expr_len=0;
}
BinaryTreeAndExpr::~BinaryTreeAndExpr()
{
}
void BinaryTreeAndExpr::Release()
{
if(root!=NULL)
{
ReleaseRecursion(root);
delete(root);
root=NULL;
}
}
void BinaryTreeAndExpr::ReleaseRecursion(TreeNode* &p) {
if(p->GetLeft()!=NULL)
{
TreeNode* p1;
p1=p->GetLeft();
ReleaseRecursion(p1);
delete(p1);
}
else if(p->GetRight()!=NULL)
{
TreeNode*p2;
p2=p->GetRight();
ReleaseRecursion(p2);
delete(p2);
}
p=NULL;
}
TreeNode* BinaryTreeAndExpr::GetRoot()
{
return root;
}