PAT (Advanced Level) Practice - 1130 Infix Expression(25 分)
发布日期:2021-06-30 23:43:03
浏览次数:2
分类:技术文章
本文共 1228 字,大约阅读时间需要 4 分钟。
题目链接:
题目大意:给一个二叉树,输出中缀表达式,且加上括号表示运算的优先级。
解题思路:首先根据所有孩子结点编号寻找 1~n 中没有出现过的编号标记为 rt,即树的根结点。然后进行从 rt 结点开始 inT(rt) 如果当前 id == -1 说明当前没有结点则返回空字符串;当 r != -1 说明该结点不是叶子节点(不可能存在只有左边没有右边的情况的啦,因为那不符合一个算式~左边可以是空表示0~右边不可以的~),那么就将左右结点的 da 和自身的 da 串成字符串,保存在自己的 da 中~如果当前 id 又不是根结点,那就在左右两边加上括号~最后输出 inT(rt) 的结果即可。
Ps:struct:如果在构造一个新的构造函数中参数里带有 string 类型,一定要补上默认的0参数构造函数;如果用 char* 替代 string,那么不需要补默认构造函数。
AC 代码
#include#include #define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;struct node{ int l,r,idx,local; string da; node(){} node(int l,int r,string da):l(l),r(r),da(da){}};int rt;int vis[30];vector v;string inT(int id){ if(id==-1) return ""; if(v[id].r!=-1) { v[id].da=inT(v[id].l) + v[id].da + inT(v[id].r); if(id!=rt) v[id].da="(" + v[id].da + ")"; } return v[id].da;}int main(){ int n,l,r; char da[20]; scanf("%d",&n); v.resize(30); for(int i=1;i<=n;i++) { scanf("%s%d%d",da,&l,&r); v[i]=node(l,r,da); vis[r==-1?0:r]=vis[l==-1?0:l]=1; } for(int i=1;i<=n;i++) if(vis[i]==0){rt=i; break;} cout< <
转载地址:https://lux-sun.blog.csdn.net/article/details/82016389 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月27日 19时43分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
用zabbix监控nginx
2019-05-01
计算机网络 —— 数据链路层 3.
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
29. 两数相除
2019-05-01
1833. 雪糕的最大数量
2019-05-01
55. 跳跃游戏
2019-05-01
dubbo+zookeeper构建高可用分布式集群
2019-05-01
Dubbo+zookeeper 最简单的分布式搭建
2019-05-01
Zookeeper简单介绍
2019-05-01
https数字证书交换过程
2019-05-01
http协议缓存详解
2019-05-01
Echarts使用及动态加载图表数据 折线图X轴数据动态加载
2019-05-01
微信小程序 获取对应页面二维码
2019-05-01
高并发量网站解决方案
2019-05-01
接口api开发中安全性问题
2019-05-01
spring boot 知识点整理
2019-05-01
URL重定向,referer,referrer和安全
2019-05-01
Android生命周期
2019-05-01
Android游戏开发基础
2019-05-01
Android Action
2019-05-01