1 算数表达式求值
三种遍历方式
①先序遍历次序(前缀式):+ * 3 - 6 2 / 8 2
②中序遍历方式(中缀式):3 * 6 - 2 + 8 / 2
③后序遍历方式(后缀式):3 6 2 - * 8 2 / +
由表达式的三种标识方法,可得到如下结论:
①操作数之间的相对次序不变
②运算符的相对次序不同
③中缀式丢失了括号信息,致使运算的次序不确定
④前缀式的运算规则是:连续出现的两个操作数和在它们之前且紧靠它们的运算符构成一个最小表达式。
⑤后缀式的运算规则是:运算符在式中出现的顺序恰为表达式的运算顺序;每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式。
实现代码:
//BinaryExpTree.h
#pragma once
#include "BTnode.h"
#include <windows.h>
class BinaryExpTree
{
public:
BinaryExpTree():m_root(NULL){}
~BinaryExpTree();
void Create(char ch1[],char ch2[],int);
int Evaluate();
private:
BTnode<char>* m_root;
void _DestroyBT(BTnode<char>* &);
int _Evaluate(BTnode<char>* &);
int _Operate(const int&, const char&, const int&);
void _Create(BTnode<char>* &,char ch1[],char ch2[],int,int,int&);
};
//BinaryExpTree.cpp
#include "BinaryExpTree.h"
BinaryExpTree::~BinaryExpTree()
{
_DestroyBT(m_root);
}
void BinaryExpTree::Create(char ch1[],char ch2[],int n)
{