利用二叉树实现简单的四则运算
在这颗树中,先出来的符号代表着他的优先级越低
所以,我们在将一串表达式输入到字符串中以后,首先要找的是最低优先级的
也就是加减…以此类推,根据
BiTree CreatTree(char s[],int i,int j) //生成表达式二叉树
{
//动态生成的树节点
BiTree p,t; //动态申请二叉树的根结点
int k, flag = 0, pos,x=0;
int m=-1,n=-1,num=0; //m,n代表左右括号的位置
char str[MAXSIZE];
double sum;
//如果i == j,则说明字符串只有一个字符,即为叶子节点、则创建只有一个根节点的二叉树并返回
if (i == j)
{
p = (BiTree)malloc(sizeof(BiTNode));
str[x++]=s[i]; //将字符转换为数字
str[x]='\0';
sum=atof(str);
p->num = sum;
p->F=Double; //设置结点的线索
p->lchild = NULL;
p->rchild = NULL;
return p;
}
//以下是 i != j的情况
//从后向前找最后一个 +或-,先找+或-为了体现先乘除后加减的原则
for (k = j; k >= i; k--)
{
if(s[k]==')') //如果有括号 先跳过括号
{
m=k;
do
{
k--;
}while(s[k]!='(');
n=k;
}
if (s[k] == '+' || s[k] == '-')
{
flag = 1;
pos = k;
break;
}
}
//若没有+或-,则寻找字符串中最后一个*或/
if (!flag)
{
for (k = j; k >= i; k--)
{
if(s[k]==')') //如果有括号 先跳过括号
{
do
{
k--;
}while