二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)
//仔细分析有代表性的实例,发现规律.
typedef struct node // 结点类型定义
{
float data;
bool sign;
struct node *lchild;
struct node *rchild;
}BTNode;
BTNode *create(char *str,int n) // 创建代数表达式对应的二叉树
{
BTNode *root = NULL; //始终指向当前已经生成的二叉树的根
BTNode *p = NULL; //始终指向当前待处理结点
float ch;
int j = 0;
ch = str[j];
while(ch != '\0' && j < n)
{
if(ch == '0' || ch == '1' ||ch == '2' ||ch == '3'||ch == '4' ||
ch == '5' || ch == '6' || ch == '7' || ch == '8'|| ch == '9')
{
p = new BTNode;
p->data = ch;
p->sign = false;
if(root == NULL)
root = p;
else if(root->rchild == NULL)
root->rchild = p;
else
root->rchild->rchild=p;
}
else if(ch == '+' || ch == '-')
{
p = new BTNode;
p->data = ch;
p->sign = true;
p->rchild = NULL;
p->lchild = root;
root = p;
root->rchild = NULL;
}
else if(ch == '*' || ch == '/')
{
if(root->data >= '0' && root->data <= '9' || root->data == '*' || root->data == '/')
{
p=new BTNode;
p->data = ch;
p->sign = true;
p->rchild = NULL;
p->lchild = root;
root = p;
}
else
{
p = new BTNode;
p->data = ch;
p->sign = true;
p->lchild = root->rchild;
root->rchild = p;
p->rchild = NULL;
}
}
j++;
ch=str[j];
}
return root;
}
float result(BTNode *b) //计算表达式
{
float n1,n2;
if(b->data >= '0' && b->data <= '9')
return (b->data - '0');
n1 = result(b->lchild);//计算左子表达式
n2 = result(b->rchild);//计算右子表达式
if (b->sign == true && b->data == '+')
b->data = n1 + n2;
else if (b->sign == true && b->data == '-')
b->data = n1 - n2;
else if (b->sign == true && b->data == '*')
b->data = n1 * n2;
else if (b->sign == true && b->data == '/')
b->data = n1 / n2;
return b->data;
}
void main()
{
while(true)
{
BTNode static *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("该表达式的值为:%f\n", result(b));
}
}
转载于:https://blog.51cto.com/howin45/315936
二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)相关推荐
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /** * ...
- C语言计算表达式咋写,C语言如何计算表达式(x++)+(++x)+(x++)
满意答案 wqnn2980 2013.06.17 采纳率:51% 等级:12 已帮助:6027人 我原来在别的贴回答过这样的问题, 这里再发一次, 如果你没看明白中间的, 你就记住开头和结尾就行 ...
- 几种生成验证码的方式以及计算表达式的计算
kaptcha 数字字母形式验证码 google kaptcha验证码生成器且可以配置生成的验证码格式 引入依赖: <dependency><groupId>com.githu ...
- C语言实现中缀转后缀并计算表达式结果
文章目录 一.问题描述 二.AC代码 三.注意点 四.实现思路/代码解析 一.问题描述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2 ...
- matlab计算表达式 k,刘卫国 Matlab 例题 1-3章
第一章 例1.1 分别绘制函数和的曲线. x=-2*pi:pi/180:2*pi; plot(x,2.^(-abs(x)),':',x,sin(x)); 例1.2 求方程 2x5-3x3 +71x2- ...
- 计算表达式结果(支持带括号的加减乘除以及乘幂和小数运算)
以(1.22+((3.43+54.54)*8^3*9)-3*(2+4*2-1))/10+9^3这个表达式为例吧.首先先分析一下这个表达式,有括号,括号的优先级最高,其次有乘幂和乘除,应该是先算乘幂再算 ...
- php字符串转换表达式,php处理字符串格式的计算表达式
有时候我们对每一种产品都有一个提成公式,而这个计算提成的公式是以字符串格式存在表中的 当我们用这个计算公式时,他并不像我们写的:$a=2+3*5;这样简单的能计算出结果,而它是个字符串 所以,我们就必 ...
- 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法
异常:本机框架位于调用堆栈之上,无法计算表达式的值 原因: 如果使用 Response.End.Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbo ...
- LeetCode Basic Calculator(用栈计算表达式的值)
题意:给出一个计算表达式,只包含 +,-,(,),求计算结果 思路:用栈来实现 代码如下: public class Solution {private int cal(int num1, int n ...
最新文章
- PHP框架之间有什么区别,php框架和设计模式区别
- docker安装elasticsearch和kibana
- java游戏贪吃蛇_Java实现贪吃蛇游戏
- Linux kernel 国内repo
- C++之new和delete探究
- spring security reactive获取security context
- [转载] R语言read.table函数
- VC设置cookies实现文件刷下载量
- u盘最大单个文件支持多少g_解决U盘拷贝时提示文件过大问题(不能拷贝超过4个g的文件)...
- CSS学习(一)--选择器
- Python语言的适用范围
- db2和相关驱动的下载
- 黑马程序员-反射-constructor-feld类-Method-数组的反射-反射的作用
- 借助CatGPT让turtlesim小乌龟画曲线
- Hadoophbase监控页面未授权访问漏洞处理方案验证过程实现
- 用户 不在 sudoers 文件中。此事将被报告
- LIO-SAM中的scan_to_map原理剖析
- C++ 取整,四舍五入
- ViewPager的setOnPageChangeListener方法详解
- 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询...
热门文章
- elasticsearch不能使用root启动问题解决
- You are running Composer with SSL/TLS protection disabled.
- MySQL学习笔记(三)
- linux系统终端介绍
- 配置使用EF6.0常见的一些问题及解决方案
- Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
- ARM LCD简单绘图API
- AMF(Action Message Format)其它语言对象转ActionScript对象[转]
- jQuery 基础学习笔记
- Linux学习系列之Nginx调优实战