1130 Infix Expression(34行代码+超详细注释)

news2024/11/22 17:15:21

分数 25

全屏浏览题目

切换布局

作者 CHEN, Yue

单位 浙江大学

Given a syntax tree (binary), you are supposed to output the corresponding infix expression, with parentheses reflecting the precedences of the operators.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤ 20) which is the total number of nodes in the syntax tree. Then N lines follow, each gives the information of a node (the i-th line corresponds to the i-th node) in the format:

data left_child right_child

where data is a string of no more than 10 characters, left_child and right_child are the indices of this node's left and right children, respectively. The nodes are indexed from 1 to N. The NULL link is represented by −1. The figures 1 and 2 correspond to the samples 1 and 2, respectively.

Figure 1Figure 2

Output Specification:

For each case, print in a line the infix expression, with parentheses reflecting the precedences of the operators. Note that there must be no extra parentheses for the final expression, as is shown by the samples. There must be no space between any symbols.

Sample Input 1:

8
* 8 7
a -1 -1
* 4 1
+ 2 5
b -1 -1
d -1 -1
- -1 6
c -1 -1

Sample Output 1:

(a+b)*(c*(-d))

Sample Input 2:

8
2.35 -1 -1
* 6 1
- -1 4
% 7 8
+ 2 3
a -1 -1
str -1 -1
871 -1 -1

Sample Output 2:

(a*2.35)+(-(str%871))

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
const int N=25; 
int n;
string node[N];//记录结点的符号 
int l[N],r[N],exist[N];//记录左右子树的结点号,和出现过的左右孩子 
bool isleaf(int u){//判断是否是叶子结点 
    if(l[u]==-1&&r[u]==-1)return true;
    else return false;
}
string inorder(int u){
    string lchild,rchild;
    if(l[u]!=-1){//有左子树 
        lchild=inorder(l[u]);//记录左子树 
        if(!isleaf(l[u]))lchild="("+lchild+")";//若左子树不是叶结点则加上括号 
    }
    if(r[u]!=-1){//有右子树 
        rchild=inorder(r[u]);//记录右子树 
        if(!isleaf(r[u]))rchild="("+rchild+")";//若右子树不是叶结点则加上括号
    }
    return lchild+node[u]+rchild;//输出左子树+中间结点+右子树 
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){//输入 
        cin>>node[i]>>l[i]>>r[i];
        if(l[i]>0)exist[l[i]]=1;//记录出现过的左孩子结点
        if(r[i]>0)exist[r[i]]=1;//记录出现过的右孩子结点 
    }
    int root;
    for(int i=1;i<=n;i++)if(!exist[i])root=i;//没出现的结点就是根结点 
    cout<<inorder(root)<<endl;
    return 0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

练习Vue烘培坊项目

烘培坊项目 文章目录 烘培坊项目项目概述项目页面展示后台管理页面登录页面文章详情页面稿件发布页面 项目关键代码实现后台管理页面稿件管理页面内容列表页面文章详情页面烘培坊主页面注册页面登录页面个人信息页面稿件发布页面 项目概述 烘培坊&#xff08;Bakery&#xff0…

WTI纽约原油CFD期货怎么交易?交易方法有哪些?

我们通常把未加工过的石油称为原油&#xff0c;原油也有“黑色黄金”之称。原油的用途无处不在&#xff0c;无论是工业制品或者日常生活用品等都离不开原油。原油一般以“桶&#xff08;barrel&#xff09;”作为单位&#xff0c;1桶约等于159升。在国际上影响力较大的基准原油…

教会你----如何烧录Arduinod代码进入ESP8266 MCU中,让你清楚的了解这个烧录方式的正确操作。

本次开发板为ESP8266 MUC 以下视频是烧录的操作&#xff0c;专给小白的视频 . .分隔符....................................................................................................... . .主要在 RST按久一点&#xff0c; 在放手的一瞬间接着按下 Flash …

电商网站的构建思维和技术

电商网站的架构及技术 3.1框架和技术 本系统主要以.net框架和C#语言位主要的开发工具&#xff0c;前端使用QUI前端框架。技术插件有Redis集群缓存、RabbitMQ 消息、MySql数据库。 实际上&#xff0c;在电商系统中&#xff0c;大部分数据都是可以缓存的&#xff0c;不能使用缓…

影响布伦特原油CFD期货行情的因素有哪些?

原油有很多种&#xff0c;其中比较有知名度的是布伦特原油&#xff0c;该原油是欧洲的原油产品&#xff0c;后来相继的有北海、地中海、也门以及非洲等诸多国家和地区以此为标准推出该产品。在国际金融市场中&#xff0c;布伦特原油特指洲际交易所&#xff08;ICE&#xff09;的…

flink1.17.0 集成kafka,并且计算

前言 flink是实时计算的重要集成组件&#xff0c;这里演示如何集成&#xff0c;并且使用一个小例子。例子是kafka输入消息&#xff0c;用逗号隔开&#xff0c;统计每个相同单词出现的次数&#xff0c;这么一个功能。 一、kafka环境准备 1.1 启动kafka 这里我使用的kafka版本…

驾校驾考APP开发功能有哪些?

随着汽车成为越来越多人出行的代步工具之后&#xff0c;需要考驾照的人也是越来越多。小编记得我当初考驾照的时候还是抱着一个小本本每天刷题练习&#xff0c;小本本都快翻烂了。移动互联网的普及让驾考也开始走向线上&#xff0c;刷题、模拟、甚至是考试都可以通过驾考APP小程…

【csdn AI写作助手能帮助我们做什么呢?】

CSDN AI写作助手上线了&#xff01;InsCode AI 创作助手不仅能够帮助用户高效创作文章&#xff0c;而且能够作为对话式AI回答你想知道的问题。成倍提高生产力&#xff01; 一、你平时会使用这类AI工具吗&#xff1f;你对这类型的工具有什么看法&#xff1f; 提示&#xff1a;根…

Ubuntu离线安装Vsftp

这是资源包&#xff1a;(14条消息) unbuntu-vsftp.server-Linux文档类资源-CSDN文库 一、安装vsftp 将包解压&#xff0c;然后在解压报的目录下一键安装 dpkg -i *.deb // 安装所有 systemctl status vsftpd #查看运行状态 systemctl restart vsftpd #重新启动vsftp 二、…

【论文阅读公式推导1】连续体机器人的哈密尔顿动力学推导

推导了一下论文哈密尔顿原理的表达&#xff0c;原论文的计算公式是对的&#xff0c;记录一下。 Gravagne I A, Rahn C D, Walker I D. Good vibrations: a vibration damping setpoint controller for continuum robots[C]//Proceedings 2001 ICRA. IEEE International Confer…

[网站分享]

Element-ui Element - The worlds most popular Vue UI frameworkElement&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.eleme.cn/#/zh-CN Vant Weapp Vant Weapp - 轻量、可靠的小程序 UI 组件库轻量、可靠的小程序 UI 组件…

没有数学基础可以学编程吗?

一、为什么学编程 这里我并不是问大家&#xff0c;是因为兴趣啊还是就业学编程。 而是&#xff0c;我想要学Python为了量化交易&#xff0c;或者我要处理表格。我想要学Java我就想自己建站。是否有这种非常明确的目标&#xff0c;有目标才能明确学习路线。 如果在这里&#…

大数据:HDFS操作的客户端big data tools和NFS

大数据&#xff1a;HDFS操作的客户端 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(三)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

Pytorch入门(二)神经网络的搭建

torch.nn中的nn全称为neural network,意思是神经网络&#xff0c;是torch中构建神经网络的模块。 文章目录 一、神经网络基本骨架二、认识卷积操作三、认识最大池化操作四、非线性激活五、线性层及其它层介绍六、简单的神经网络搭建七、简单的认识神经网络中的数值计算八、损失…

mmdetection训练coco数据集(继跑通后的一些工具使用)

&#xff08;仅做个人过程记录的笔记&#xff09; 1、生成中间件 可以选择评估方式 --eval &#xff0c;对于 COCO 数据集&#xff0c;可选 bbox 、segm、proposal 。可以得到result.bbox.json文件 生成pkl文件&#xff1a;faster_rcnn.pkl python tools/test.py config.py …

利用栈和队列共同解决迷宫问题

文章目录 什么是迷宫问题&#xff1f;如何解决迷宫问题&#xff1f;DFS&#xff08;深度优先搜索&#xff09;BFS&#xff08;广度优先搜索&#xff09; 总结 什么是迷宫问题&#xff1f; 迷宫问题是一道经典的算法问题&#xff0c;旨在寻找一条从起点到终点的最短路径。通常迷…

games101作业6

作业要求 Render() in Renderer.cpp: 将你的光线生成过程粘贴到此处&#xff0c;并且按照新框 架更新相应调用的格式。Triangle::getIntersection in Triangle.hpp: 将你的光线-三角形相交函数 粘贴到此处&#xff0c;并且按照新框架更新相应相交信息的格式。 在本次编程练习中…

删除排序链表中的重复元素(java)

删除链表中的重复元素 leetcode 83 题 删除链表中的重复元素解题思路代码链表专题 leetcode 83 题 删除链表中的重复元素 leetcode 83 题 – 跳转链接 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。…

Python numpy - 数组与矩阵的创建&运算

数组array 一 数组的创建 &#xff08;至少两个数组&#xff09;创建随机整数数组 a 和 b import numpy as np a np.random.randint(10,size20).reshape(4,5) b np.random.randint(10,size20).reshape(4,5) 二 数组常用函数 数组常用函数 函数作用unique&#xff08;&…