表达式类型的实现(二叉树)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档