7-57 表达式树括号 (10 分)

括号匹配算法 题目:有一段字符串,包含"("和")"、"["和"]"、"{"和"}"中的一种或者多种,这三种括号出现次序不定,可随意嵌套。编写            代码判断三种括号是否正确匹配。 思路一(栈的思想):括号匹配是运用栈的经典思想。在算法中设置一个空栈,每次读入一个括号,若是左括号,则压入栈中,等到对应的右括号压栈,若是右括号,能使置于栈顶的最急迫的期待得以消解,此时将栈顶的左括号弹出, 阅读详情

数据结构作业-20软件030405

7-57 表达式树括号 (10 分)

请编写程序将表达式树按中缀表达式输出,并填加必要的括号,要求括号不能冗余,即保证正确运算次序所需的最少括号。如a∗(b+c)和a+(b−c)中的括号是必要的,而a+(b∗c) 的括号则是冗余的。假定表达式树中的运算均为二元运算,只涉及加、减、乘、除运算。

输入格式:
输入为一行字符串,表示带空指针信息的表达式树先根序列,空指针信息用#表示,操作数为a-z的小写字母,运算符为+、-、*、/。

输出格式:
输出为一行字符串,表示填加必要括号后的中缀表达式。

输入样例1:
a##+b##c##
结尾无空行
输出样例1:
a
(b+c)
结尾无空行
输入样例2:
+a##b##c##
结尾无空行
输出样例2:
a+b
c
结尾无空行

出题人题意不是很明确,大概意思就是说要保证原运算顺序,还要加最少括号 第一个测试点有坑
测试点1:++a##b##++c##d##+e##f##
答案1:a+b+(c+d+(e+f))

#include<bits/stdc++.h>
using namespace std;
#define lc tr[i].l
#define rc tr[i].r
#define tc tr[i].ch

const int N = 1e5+100;
struct node{
	char ch;
	int l,r;
}tr[N];
int tot;
void build(int i){
	tc=getchar();
	if(tc=='#') return;
	build(lc=++tot);
	build(rc=++tot);
}
void dfs(int i){
	if(isalpha(tc)){
		putchar(tc);
		return ;
	}
	if((!isalpha(tr[lc].ch))&&(tc=='*'||tc=='/')&&(tr[lc].ch=='+'||tr[lc].ch=='-')){
		putchar('(');
		dfs(lc);
		putchar(')');
	}
	else
		dfs(lc);
	putchar(tc);
	if((!isalpha(tr[rc].ch))&&(tc=='*'||tc=='/'||tr[rc].ch=='+'||tr[rc].ch=='-')){
		putchar('(');
		dfs(rc);
		putchar(')');
	}
	else
		dfs(rc);
}
int main()
{
	build(++tot);

	dfs(1);
	
	return 0;
}
Week 4 Problem B ps:未完成 还没搞清输出规则 题目: 请编写程序将表达式树按中缀表达式输出,并添加必要的括号,要求括号不能冗余,即保证正确运算次序所需的最少括号。如a*(b+c)和a+(b-c)中的括号是必要的,而a+(b*c)的括号是冗余的。假定表达式树中的运算均为二元运算。 输入格式: 输入为一行字符串,表达加入空指针信息的表达式树先根序列,空指针信息用#表示。 输出格式: 输出为一行字符串,表示添加必要括... 阅读详情

相关推荐

用表达式树输出中缀表达式

给定一个表达式,输出其中缀表达式,利用了栈和二叉树,是理解数据结构很好的资料

表达式树括号 C语言(C++)解法

题目: 请编写程序将表达式树按中缀表达式输出,并填加必要的括号,要求括号不能冗余,即保证正确运算次序所需的最少括号。如a * (b + c)和a + (b - c)中的括号是必要的,而a + (b * c)的括号则是冗余的。假定表达式树中的运算均为二元运算,只涉及加、减、乘、除运算。 输入格式: 输入为一行字符串,表示带空指针信息的表达式树先根序列,空指针信息用#表示,操作数为a-z的小写字母,运算符为+、-、*、/。 输出格式: 输出为一行字符串,表示填加必要括号后的中缀表达式。 输入样例1: *a##

qq_50745337的博客 1495

VirtualBox虚拟机上ubuntu系统安装问题记:显示画面太小、启动就异常退出等

报错:Failed to load R0 module D:/VMMR0.r0: The path is not clean of leading double slashes: ‘D:/VMMR0.r0’ (VERR_SUPLIB_PATH_NOT_CLEAN).解决方法特别简单,就是安装VIrtualBox的时候不要安装在CDE等盘根目录下。首先VirtualBox的下载安装过程是比较简单的,此处就不赘述了。然后E盘下新建个目录,安装到这个目录下就可解决。

qq_42595610的博客 2826

将给定的表达式树(二叉树)转换为等价的中缀表达式,(通过括号反应操作符的计算次序)并输出 最外层带括号的代码

【代码】将给定的表达式树(二叉树)转换为等价的中缀表达式,(通过括号反应操作符的计算次序)并输出 最外层带括号的代码。

qq_19641165的博客 662

Virtualbox “Kernel driver not installed (rc=-1908)”问题全面解析与修复指南

本文全面解析了Virtualbox出现'Kernel driver not installed (rc=-1908)'错误的原因及修复方法。详细介绍了如何通过重新安装virtualbox-dkms、处理Secure Boot特殊情况等步骤解决该问题,并提供了预防措施与最佳实践,帮助用户避免类似错误再次发生。

weixin_30352645的博客 530

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav...

vatxiongxiaohui的专栏 8万+

数据结构与算法 习题 表达式树括号

请编写程序将表达式树按中缀表达式输出,并填加必要的括号,要求括号不能冗余,即保证正确运算次序所需的最少括号。如a∗(b+c)和a+(b−c)中的括号是必要的,而a+(b∗c)的括号则是冗余的。假定表达式树中的运算均为二元运算,只涉及加、减、乘、除运算。

m0_56143632的博客 1019

开源AI数字人DUIX:从零构建你的智能交互助手

本文详细介绍了如何利用开源AI数字人DUIX从零构建智能交互助手。文章阐述了DUIX作为开源项目的核心优势,包括低成本启动、低网络依赖和高度可定制性,并提供了从开发环境搭建、核心模块(AI模型、语音、形象)配置到个性化业务逻辑开发与最终部署的完整实践指南,帮助开发者快速掌握构建专属AI数字人的全流程。

weixin_29051811的博客 504

数据结构——表达式树

对于我而言这个题目的难点在于任何打印出一棵二叉树以及将变量转化为数值进行计算。通过做这个题目我掌握了中缀表达式转化为后缀表达式、通过后缀表达式建立二叉树、将变量转化为数值进行计算以及打印一棵二叉树这几个操作,并且对二叉树的概念和操作有了更深的理解,同时又复习了一遍栈概念和操作。

cjbdcxy的博客 4038

edusrc挖掘思路

edusrc挖掘思路前言思路信息搜集系统账号常见漏洞实战分享1、确定目标,语法:site:xxxx.edu.cn2、账号密码组成我们知道了,谷歌语法查找工号3、爆破登录系统4、确定功能,抓具体的url5、添加单引号,报错,是mssql6、报数据库版本,到这一步就可以交了,已经是中危了后记 前言 一月份的时候偶然注意到edusrc,起初是抱着学习的心态去挖几个洞,可是后面发现有证书,而且还贼好看,于是我动了凡心,一顿操作也拿了几本,广西民大、山东理工、同济,未到的有浙大、上海理工,证书要求证书图片可以在我个人

qq_45414878的博客 2万+

滑模控制算法(SMC)讲解-案例(附C代码)

该文章介绍了滑模控制算法的原理实现步骤,特点及关键问题,最后以车辆控制案例来讲解滑模控制的整个步骤实现

heda3的博客 4111

蓝桥杯 算法训练 ALGO-57 删除多余括号

算法训练 删除多余括号 时间限制:1.0s 内存限制:512.0MB 问题描述   从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简。另外不考虑'+' '-'用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形。 输入格式   表达式字符串,长度不超过...

dcpvpf6917的博客 443

路径规划 | 图解RRT*算法(附ROS C++/Python/Matlab仿真)

RRT*算法针对传统RRT算法进行了渐进最优改进,在添加节点到搜索树的过程中进行重连选择。本文图解RRT*算法原理,并采用ROS C++、Python、Matlab三种语言实现算法,加深理解

FRIGIDWINTER的博客 9405

栈的应用——括号匹配、表达式求值、递归

本文主要介绍了栈在括号匹配、表达式求值和递归方面的应用,包含理论知识和代码。

HePingxxb的博客 1851

16、SQL Server索引的创建与评估

本文详细介绍了SQL Server中索引的创建与评估方法,涵盖索引的基本概念、类型(聚集与非聚集)、唯一性设置以及如何判断索引的好坏。通过实际操作步骤、维护策略和常见问题解决方案,帮助数据库开发者合理设计索引,提升查询性能并控制维护开销。同时提供了索引创建与维护的决策流程图,便于理解和应用。

water的专栏 126

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

表达式树求值

问题描述 输入一个算数表达式,表达式包含+,-,*,/(整除)等运算符及括号,表达式长度不超过1000个字符,运算过程的数值均小于2^31-1。 输入格式 一行,算数表达式 输出格式 算数表达式结果 输入样例 (11+3)*2 输出样例 28 限制与约定 时间限制:1s 空间限制:128MB #include<iostream> #incl...

weixin_30598225的博客 636

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

表达式括号匹配配对判断问题

表达式括号匹配配对判断问题 1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 #include <stack> 5 using namespace std; 6 7 int main() ...

豆子 1677

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

表达式计算--表达式树

目前只能算单位数,可计算括号与加减乘除。 代码如下: 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 1000; 5 int lch[maxn],rch[maxn]; 6 char op[maxn]; 7 int nc = 0,n; 8 char s[1000...

weixin_30629977的博客 351

构造树求解逆波兰表达式

  1 #include&lt;iostream&gt; 2 #include&lt;string&gt; 3 #include&lt;vector&gt; 4 #include&lt;tuple&gt; 5 6 using namespace std; 7 8 class Node{ 9 public : 10 char val; ...

creator123123的博客 586

7-20 表达式转换 (25 分) c语言

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。 输入格式: 输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。 输出格式: 在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。 输入样例: 2+3*(7-4)+8/4 输出样例: 2 3 7 4 - * + 8 4 / +

Mark姚 1514

栈的基础应用3——含括号的运算表达式求解

本博客已迁移至SnailDove's Blog,查看本文请点击此处 本文根据严蔚敏老师数据结构(c语言版) 写的程序 如有需要先去看视频 如有错误不当之处,欢迎指出,以免害人害己 例子 Exp = a * b + ( c – d / e )* f 前缀式:+ * a b * - c / d e f 中缀式:a * b + c–d / e * f 后缀式:a b * cd

you1314520me的专栏 1947

算法训练 删除多余括号

@ 蓝桥杯 练习系统 算法训练 ALGO-57 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简。另外不考虑’+’  '-'用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形。 输入格式 表达式字符串,长度不超过255,  并且不含空格字符。表达式中的所有变量都是单个小写的英文字母, 运算符只有加+减-乘*除/等运算符号。

NOW I GOT ONE WAY 1061

详解Java中的Lambda表达式

文章目录1、Lambda表达式概述2、Lambda表达式语法3、具体写法无返回值有形参的抽象方法有返回值的抽象方法有一个形参的抽象方法Lambda表达式作为参数传递4、Lambda表达式注意事项5、Java中四大函数式接口6、方法引用对象::实例方法类::静态方法类::实例方法7、构造引用 1、Lambda表达式概述 Lambda表达式是JDK1.8之后的一种语法,是一个匿名函数,是对匿名函数的简写形式,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),可以写出更简洁、更

weixin_45082647的博客 4万+

通过不断迭代,编写<通过中缀表达式,构造表达式树>的代码

今天要练习的算法是通过中缀表达式生成表达式树。中缀、前缀、后缀表达式的概念就不赘述了,学习链接:中缀、前缀、后缀表达式。 参考代码学习链接:表达式树—中缀表达式转换成后缀表达式(一)。 【迭代 ①】:识别单个运算符,进行分割,通过递归的思想构建表达式树。 举例:输入“1+2”,输出。 Java code...

weixin_30746117的博客 157

表达式建树

//用数组实现树 1 #include<iostream> 2 #include<ctype.h> 3 #include<cstring> 4 #define N 10000 5 #define optd 1 6 #define optr 2 7 using namespace std; 8 int treeL[N]...

aipiannian6725的博客 206
上一篇: 3-1 括号匹配 (20 分)
下一篇: 可持久化线段树--主席树
liamaking
博客等级 码龄7年 97粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值