二叉树表达规定形式的代数表达式并计算表达式结果(有缺陷版本)
2010-05-15 13:54
323 查看
题目:编写一个程序,先用二叉树来表示代数表达式,树的每一个结点包括一个运算符或者运算数,代数表达式中只包含加减乘除和一位整数且没有错误,并按先加减后乘除的原则构造二叉树,然后由对应的二叉树计算该表达式的值。
#include<stdio.h> //程序缺陷:4/5这样的浮点结果不能正确计算.待改进. //仔细分析有代表性的实例,发现规律. typedef struct node // 结点类型定义 { char data; struct node *lchild; struct node *rchild; }BTNode; BTNode *create(char *str,int n) // 创建代数表达式对应的二叉树 { BTNode *root = NULL; //始终指向当前已经生成的二叉树的根 BTNode *p = NULL; //始终指向当前待处理结点 char ch; int j = 0; ch = str[j]; while(ch!='/0' && j < n) { switch(ch) { case '0': //数字的处理 case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': p = new BTNode; p->data = ch; if(root == NULL) root = p; else if(root->rchild == NULL) root->rchild = p; else root->rchild->rchild=p; break; case'+': //扫描到'+''-',作为当前根结点 case'-': p = new BTNode; p->data = ch; p->rchild = NULL; p->lchild = root; root = p; root->rchild = NULL; break; case'*': //'*'和'/'的处理 case'/': if(root->data >= '0' && root->data <= '9' || root->data == '*' || root->data == '/') { p=new BTNode; p->data = ch; p->rchild = NULL; p->lchild = root; root = p; } else { p = new BTNode; p->data = ch; p->lchild = root->rchild; root->rchild = p; p->rchild = NULL; } break; } j++; ch=str[j]; } return root; } int result(BTNode *b) //计算表达式 { int n1,n2; if(b->data>='0'&&b->data<='9') return (b->data-'0'); n1=result(b->lchild);//计算左子表达式 n2=result(b->rchild);//计算右子表达式 switch(b->data) { case'+': b->data=n1+n2;break; case'-': b->data=n1-n2;break; case'*': b->data=n1*n2;break; case'/': b->data=n1/n2;break; } return b->data; } void main() { BTNode *b=NULL,*q=NULL; char str[100]; printf("请输入符合要求的代数表达式:"); scanf("%s",str); int n=0,i=0; while(str[i++] != '/0') n++; b = create(str,n); printf("该表达式的值为:%d/n",result(b)); }
相关文章推荐
- 二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)
- 二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)
- 二叉树表达规定形式的代数表达式并计算表达式结果
- 中缀表达式转后缀表达式并计算结果
- 第11周项目2-用二叉树求解代数表达式
- 第十一周项目2-用二叉树求解代数表达式
- 第十一周项目2-用二叉树求解代数表达式
- 表达式前后缀表达形式 [zz]
- 输入一个字符串表达式,输出计算结果(队列、栈的应用)
- sed及正则表达式随手记之一:用以提取stat命令结果的数字权限形式
- Shell读取一个表达式并计算其结果
- 利用栈结构计算代数表达式的值
- 华为机试 计算加减乘除数学表达式的结果
- 第十一周项目2-用二叉树求解代数表达式
- 第十一周项目二:用二叉树求解代数表达式
- 第11周项目2 用二叉树求解代数表达式
- c#中动态输入和计算 代数表达式
- 二叉树计算四则运算表达式
- 项目 2 - 用二叉树求解代数表达式
- 第11周项目2-用二叉树求解代数表达式