A1130 | 中缀表达式、查找根节点
代码:
#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 10000
#define MAX 0x06FFFFFF
#define V vector<int> using namespace std; typedef struct inputInfo{
string d;int l,r;
}inputInfo; typedef struct Node{
string d;struct Node * l=NULL;struct Node * r=NULL;
Node(){}
Node(string D){d=D;}
}Node; inputInfo infoArr[];
Node *nodes[];
int used[];
Node * insert_node(int index);
void inOrder(Node* node);
Node * root;
int cnt=; int main() {
freopen("d:/input/A1130/1.txt","r",stdin);
int N,i;
scanf("%d",&N);
F(i,,N+){
char buffer[];
scanf("%s %d %d",buffer,&infoArr[i].l,&infoArr[i].r);
infoArr[i].d=buffer;
}
F(i,,N+){
if(!used[i])insert_node(i);
if(cnt>=N) break;
}
// printf("%d %d\n",cnt,i);
root=nodes[i];
inOrder(root->l);
printf("%s",root->d.c_str());
inOrder(root->r);
return ;
} Node * insert_node(int index){
used[index]=;
cnt++;
inputInfo info=infoArr[index];
Node *node=new Node(info.d); int l=info.l,r=info.r;
if(l>)
if(used[l]){
node->l=(nodes[l]);
}else{
node->l=insert_node(l);
}
if(r>)
if(used[r]){
node->r=(nodes[r]);
}else{
node->r=insert_node(r);
}
nodes[index]=node; return node;
} void inOrder(Node* node){
if(node){
bool haveK=(node->l||node->r)?:;
if(haveK) O("(");
inOrder(node->l);
printf("%s",node->d.c_str());
inOrder(node->r);
if(haveK) O(")");
}
}
主要的点有两个。首先是中缀表达式:
void inOrder(Node* node){
if(node){
bool haveK=(node->l||node->r)?:;
if(haveK) O("(");
inOrder(node->l);
printf("%s",node->d.c_str());
inOrder(node->r);
if(haveK) O(")");
}
}
inOrder(root->l);
printf("%s",root->d.c_str());
inOrder(root->r);
对中序遍历稍加修改,就可以得到像这样的中缀表达式:(a+b)*(c*(-d))
其次是录入输入信息后怎样不浪费时间,巧妙的找到根节点是哪一行记录。这里我们用nodes数组记录树形结点,用used数组记录是否访问过,用cnt记录形成结点的个数,然后递归调用insert_node,就可以及时找到根节点的记录。
需要进步的点:做题速度太慢。
A1130 | 中缀表达式、查找根节点的更多相关文章
- 【转】oracle CONNECT BY PRIOR叶子节点查找根节点
SELECT TRANS_ID FROM TRANS_INST WHERE connect_by_isleaf=1 START WITH TRANS_ID =480242 CONNECT BY PRI ...
- C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)
最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...
- 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放
01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...
- 通过不断迭代,编写<通过中缀表达式,构造表达式树>的代码
今天要练习的算法是通过中缀表达式生成表达式树.中缀.前缀.后缀表达式的概念就不赘述了,学习链接:中缀.前缀.后缀表达式. 参考代码学习链接:表达式树—中缀表达式转换成后缀表达式(一). [迭代 ①]: ...
- hdu 2545(并查集求节点到根节点的距离)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2545 思路:dist[u]表示节点u到根节点的距离,然后在查找的时候更新即可,最后判断dist[u], ...
- C#用xpath查找某节点
C#用xpath查找某节点 从根节点一直下来的相对路径才能确定Xpath的写法. /root/<节点1>/<节点2>//<@属性> Xpath是功能很强大的,但是也 ...
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...
- 用TinyXml做XML解析示例 TinyXml查找唯一节点及修改节点操作
// 读者对象:对TinyXml有一定了解的人.本文是对TinyXml工具的一些知识点的理解. // 1 TinyXml中对TiXmlNode进行了分类,是用一个枚举进行描述的. // enum No ...
- MySQL InnoDB primary key根节点常驻内存
mysql的InnoDB存储引擎在设计时是将根节点常驻内存的,也就是说查找某一键值的行记录时最多只需要1~3次磁盘I/O操作.
随机推荐
- 重点|183道Java面试题可以说很详细了
<p style="text-align: right;"><span style="font-size: 14px;color: rgb(136, 1 ...
- c#中关于@的作用
参考链接:https://www.cnblogs.com/linkbiz/p/6380814.html
- springMVC中controller层方法中使用private和public问题
楼主一直习惯使用public,偶尔手误也可能使用private,但是发觉也没啥区别,都能调用service层,注入bean. 后来做一个新项目时,发觉自己以前的写的部分功能报错,当时有点懵逼,,找了半 ...
- selenium中元素操作之上传操作(六)
上传操作分为两种情况: 1.input标签上传 如果是input可以直接输入路径的,那么直接调用send_keys输入路径,和前边的元素操作类似,在这里不再过多的赘述. 2.非input标签上传 非i ...
- Ubuntu 下安装zsh和oh-my-zsh
注意:安装前先备份/etc/passwd 一开始装oh-my-zsh我是拒绝的,因为这东西安装容易,卸载难,真的很难. Mac安装参考:http://www.cnblogs.com/EasonJim/ ...
- #define宏作用
预处理器的任务 简单来讲,预处理器的任务就是执行源代码中的预处理指令,并对源代码进行相应的处理.因此,从预处理指令的类型来讲,预处理器的任务包括如下的几个部分: 将其他文件包含到当前文件中. 定义宏, ...
- CDN: trunk Repo update failed - CocoaPods
解决方案: 1.podfile文件中添加source源: source 'https://github.com/CocoaPods/Specs.git' 2.执行 pod repo remove t ...
- ES6 字符串&正则表达式
目录 第二章 字符串和正则表达式UTF-16码位codePointAt()方法String.fromCodePoint()方法normalize()方法正则表达式u修饰符其他字符串变更字符串中的字串识 ...
- Python 集合(Set)、字典(Dictionary)
集合(Set) 集合是无序的,无序也就没有索引,不能进行索引相关的操作.无序,python解释器就不能通过索引(位置)区分集合中的相同元素,所以集合中不能有相同的元素. 集合用大括号{ }表示. 集 ...
- Pandas 之 Series / DataFrame 初识
import numpy as np import pandas as pd Pandas will be a major tool of interest throughout(贯穿) much o ...