1)二叉树仅含二元运算符,存储在二叉树BT中,写出计算该算术表达式的值的算法。
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct BTreeNode
{
float data;
char optr;
struct BTreeNode *lchild,*rchild;
}BiNode,*BTree;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
float PostEval(BTree bt)//后序遍历
{
float lv,rv;//左右表达式的值;
float value;//最终值
if(bt)
{
lv=PostEval(bt->lchild);
rv=PostEval(bt->rchild);
switch(bt->optr)
{
case '+':value=lv+rv;break;
case '-':value=lv-rv;break;
case '*':value=lv*rv;break;
case '/':value=lv/rv;break;
}
}
return value;
}
2)给出算法将二叉树表示的表达式二叉树按中缀表达式输出,并加上相应的括号
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct BTreeNode
{
float data;
char optr;
struct BTreeNode *lchild,*rchild;
}BTree;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
int Precede(char optr1,char optr2)//比较运算符级别高低,optr1高于optr2时返回1,相等时返回0,低于时返回-1
{
switch(optr1)
{
case '+':case'-':if(optr1=='+'||optr2=='-')return 0;else return -1;
case '*':case'/':if(optr1=='*'||optr2=='/')return 0;else return 1;
}
}
void InorderExp(BTree *bt)//输出二叉树的表达式
{
float lv,rv;//左右表达式的值;
float value;//最终值
int bracket;
if(bt)
{
if(bt->lchild)
{
bracket=Precede(bt->data,bt->lchild->data);//比较双亲与左子女运算符优先级
if(bracket==1)cout<<'(';
InorderExp(bt->lchild);//输出左子女的算术表达式
if(bracket==1)cout<<')';
}
cout<<bt->data;//输出根结点
if(bt->rchild)
{
bracket=Precede(bt->data,bt->rchild->data);//比较双亲与右子女运算符优先级
if(bracket==1)cout<<'(';
InorderExp(bt->rchild);//输出右子女的算术表达式
if(bracket==1)cout<<')';
}
}
}