PAT A1162 Postfix Expression

news2024/11/19 23:12:05

1162 Postfix Expression

分数 25

作者 陈越

单位 浙江大学

Given a syntax tree (binary), you are supposed to output the corresponding postfix 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 postfix expression, with parentheses reflecting the precedences of the operators.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)%))+)

  每个节点用一个结构体存储,结构体信息应包括结点值,左右孩子编号;
 * 处理步骤先找出根节点,再应根节点进行后序遍历,但应注意:如果有
 * 右孩子而没有左孩子,那么此根节点作为符号前缀,那么应该将根节点
 * 先于孩子结点输出,否则先左孩子再右孩子最后根节点;

/**
 * 每个节点用一个结构体存储,结构体信息应包括结点值,左右孩子编号;
 * 处理步骤先找出根节点,再应根节点进行后序遍历,但应注意:如果有
 * 右孩子而没有左孩子,那么此根节点作为符号前缀,那么应该将根节点
 * 先于孩子结点输出,否则先左孩子再右孩子最后根节点;
*/

#include <iostream>

using namespace std;

struct Node
{
    string s;
    int l, r;
};
const int N = 30;
bool hs[N]; //hs数组为了找出根节点
struct Node tr[N];
int n, root;

void Read()
{
    cin >> n;
    for(int i=1; i<=n; ++i)
    {
        string s;
        int l, r;
        cin >> s >> l >> r;
        
        if(l != -1) hs[l] = 1; 
        if(r != -1) hs[r] = 1;
        tr[i] = {s, l, r};
    }
}

void beh_traver(int root)
{
    if(root == -1)  return; //递归边界
    
    int l = tr[root].l, r = tr[root].r;
    string s = tr[root].s; 
    
    cout << '(';
    
    //如果有右孩子而没有左孩子,那么此根节点作为符号前缀,那么应该
    //将根节点先于孩子结点输出,否则先左孩子再右孩子最后根节点;
    if(l == -1 && r != -1)  cout << s; 
    
    beh_traver(l); 
    beh_traver(r);
    
    if(l == -1 && r != -1)  cout << ')';
    else cout << s << ')';
}

int main()
{
    Read();
    
    for(root = 1; hs[root] != 0; ++root); //找到根节点
    
    beh_traver(root);
    
    return 0;
}

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

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

相关文章

权限管理与Shiro入门

权限管理与Shiro入门 学习目标&#xff1a; 理解前端权限控制思路 理解有状态服务和无状态服务通过拦截器实现JWT鉴权 能够理解shiro以及shiro的认证和授权 前端权限控制 需求分析 需求说明 基于前后端分离的开发模式中&#xff0c;权限控制分为前端页面可见性权限与后…

操作系统复习3.1.1-内存非连续存储

基本分页存储管理 背景 固定分区带来的是内部内存碎片难以利用 而动态分配带来的外部内存碎片难以利用 而基本分页存储管理解决了这个问题&#xff0c;将一个进程分散地装入不同分区&#xff0c;避免了紧凑的处理 思想 将一个进程(43MB)装入内存&#xff0c;一个分页大小为…

【fluent】利用UDF和Scheme变量实现根据条件满足情况保存dat、case数据案例文件

一、问题背景 前一段时间在闲鱼上&#xff0c;遇到有一个人问我“在udf中如何实现某一个变量满足一定取值范围内才保存dat和case文件”。 而后我帮他解决了这个问题&#xff0c;在此处也将解决办法公益性地分享出来。 主要参考的是CFD online上的一篇讨论fluent udf, saving…

chatgpt赋能python:Python函数:介绍及应用

Python函数&#xff1a;介绍及应用 Python是一种功能强大的编程语言。函数是Python编程中最常用的组件之一。函数是用来执行特定的程序并返回结果的工具&#xff0c;可以在一个程序中调用多次。在本文中&#xff0c;我们将介绍Python函数的应用和使用方法。 Python函数的定义…

ant-design-vue将英文改为中文 DatePicker日期控件

ant-design设置DatePicker日期控件中文显示 ant-design-vue将英文改为中文 我们在使用 ant-design-vue 的时候 会遇到默认的语言是 英语 大部分我们需要转成为中文 这时候我们就需要进行配置 首先我们改单一组件的语言&#xff1a; <template><a-date-picker v-model:…

互联网医院牌照申请条件|互联网医院牌照申请流程

​ 随着互联网技术的迅速发展&#xff0c;互联网医院已成为医疗服务领域的重要组成部分。互联网医院是指通过互联网提供医疗服务的机构&#xff0c;其开展医疗业务需经过相关管理部门的批准&#xff0c;且必须持有互联网医院牌照。 申请条件 互联网医院牌照的申请条件如下&a…

互联网医院资质的申请条件和流程有哪些

​随着互联网的快速发展&#xff0c;互联网医疗逐渐成为了医疗行业的重要组成部分&#xff0c;互联网医院也因此出现了。互联网医院是指通过网络技术&#xff0c;开展远程医学服务、健康管理、医学教育等活动的医疗机构。 互联网医院牌照申请需要的资料和条件 要想成功申请互…

压缩感知重构之分段正交匹配追踪算法

算法的重构是压缩感知中重要的一步&#xff0c;是压缩感知的关键之处。因为重构算法关系着信号能否精确重建&#xff0c;国内外的研究学者致力于压缩感知的信号重建&#xff0c;并且取得了很大的进展&#xff0c;提出了很多的重构算法&#xff0c;每种算法都各有自己的优缺点&a…

Arthas-Class/Classloader相关命令使用

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 开头&#xff1a; 我们先说下生产使用频率较高的有哪些&#xff1a;dump、jad、mc、retransfo…

FMEA教程

1. 2. 3. 4. 5. PFMEA是“过程失效模式与后果分析”的英文“Process Failure Mode and Effect Analysis”的缩写。为了更好地促进AQP PFMEA软件的应用&#xff0c;我们将以系列文章分享运用AQP PFMEA软件有效开展PFMEA工作的理念和方法&#xff0c;同时系统性介绍AQP PFMEA软…

leetcode96--不同的二叉搜索树[java]

不同的二叉搜索树 leetcode 96 题 不同的二叉搜索树题目描述暴力递归解题思路代码演示执行效率 递归 缓存解题思路代码演示执行效率 动态规划专题 leetcode 96 题 不同的二叉搜索树 原题链接: 难度—中等 https://leetcode.cn/problems/unique-binary-search-trees/ 题目描述 …

chatgpt赋能python:分解gif:使用Python将动态图片拆分成单帧图片

分解gif&#xff1a;使用Python将动态图片拆分成单帧图片 随着互联网上图片的使用越来越普遍&#xff0c;动态图片也成为了大家经常使用的图片之一。GIF动态图作为一种常见的动态图片格式&#xff0c;有时需要将其拆分成单帧图片&#xff0c;以便于使用或修改其中的某一帧。本…

目标检测笔记(九):详细介绍并实现可视化深度学习中每层特征层的网络训练情况

文章目录 为什么要解析特征层如何可视化特征层可视化结果如何 ❤️ &#x1f9e1; &#x1f49b; &#x1f49a; &#x1f499; &#x1f49c; &#x1f5a4; &#x1f90d; &#x1f90e; &#x1f494; ❣️ &#x1f495; &#x1f49e; &#x1f493; &#x1f497; &#…

SpringCloud(三)

文章目录 Eureka注册中心Eureka的结构和作用搭建eureka-server创建eureka-server服务引入eureka依赖编写启动类编写配置文件启动服务 服务注册1&#xff09;引入依赖2&#xff09;配置文件3&#xff09;启动多个user-service实例 服务发现1&#xff09;引入依赖2&#xff09;配…

chatgpt赋能python:Python冒泡法排序:一种简单且高效的排序方法

Python 冒泡法排序&#xff1a;一种简单且高效的排序方法 在计算机科学中&#xff0c;排序算法是一种将给定数据集合重新排列为按照一定顺序排列的有序序列的方法。而冒泡排序算法是其中最简单、最基础的一种排序算法。 什么是冒泡排序&#xff1f; 冒泡排序&#xff0c;顾名…

代码随想录第49天

1.买卖股票的最佳时机&#xff1a; 贪心 因为股票就买卖一次&#xff0c;那么贪心的想法很自然就是取最左最小值&#xff0c;取最右最大值&#xff0c;那么得到的差值就是最大利润。 C代码如下&#xff1a; class Solution { public:int maxProfit(vector<int>& …

一键部署个人ChatGPT Web网站

一键部署个人ChatGPT Web网站 githubVercel使用自己的域名 本文将向大家介绍如何通过Github和Vercel这两个具,轻松搭建自己的ChatGPT Web网站&#xff0c;并且我们还可以添加密码保护以防止恶意滥用。 github 首先&#xff0c;我们需要拥有一个Github账号和Vercel账&#xff0…

【Set集合】概述和特点

Set集合概述和特点 Set集合概述 Set作为Collection集合的子接口&#xff0c;没有新增的功能&#xff0c;Collection集合可用的功能Set集合也可以用。 Set集合特点 Set集合存储的元素是无序的&#xff0c;而且不允许存储重复的元素&#xff0c;每当有新的元素存入的时候&#x…

操作系统复习3.2.1-虚拟内存

传统存储的问题 一次性&#xff1a;一次性装入作业才能运行 驻留性&#xff1a;不是所有部分都需要长时间存放在内存中 定义和特征 将要用的部分载入内存&#xff0c;不用的部分调出外存&#xff0c;逻辑上扩大内存 虚拟内存的最大容量为计算机的寻址范围决定 实际容量则为内…

【哈希值】概述和特点

哈希值概述和特点 哈希值概述 哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 Object类中有一个方法可以获取对象的哈希值&#xff1a; public int hashCode()&#xff1a;返回对象的哈希值 哈希值特点 同一个对象多次调用hashCode()方法返回的哈希值是相…