UVa 122 Trees on the level
题目的意思:
输入很多个节点,包括路径和数值,但是不一定这些全部可以构成一棵树,问题就是判断所给的能否构成一棵树,且没有多余。
网上其他大神已经给出了题目意思:比如我一直很喜欢的小白菜又菜的博客
说一声:
之前看了网上好多代码,看的大段大段的,看不下去了,就准备自己写了,结果写出来也是大段大段的,其实中间有不少是被注释掉的测试代码,可忽略不计!
// 测试样例:udebug :链接
// 我整个代码最核心的整体思想就是把全部节点放到map中,
// 然后层级遍历到的就放到vector(V)中,并从map中删除(重点),最后如果map有剩余就认为not complete!
<span style="font-family:Courier New;font-size:14px;">#include <iostream> #include <string> #include <cstdio> #include <cstdlib> #include <vector> #include <map> #include <queue> using namespace std; struct s{ string path; //节点路径 int value; //节点值 }; vector <int> v; //存放可输出的树的节点 map <string, int> m; //存放树 map <string, int> ::iterator it,it1,it2; queue <s> q; //这个地方是重点,就是如何层级输遍历输出; //在网上看了一下,层级遍历可以用队列,对于每个在队列里面的pop之后,把他的左儿子和右儿子加到队列里(如果有) void levelordertravel(){ s temp; string t,t1,x,y; //如果连根都没有,直接返回了 it=m.find(""); if(it!=m.end()) q.push({it->first,it->second}); else return; while(!q.empty()){ temp=q.front(); //cout<<temp<<endl; v.push_back(temp.value); t=temp.path; t1=t; m.erase(t); q.pop(); //对于每个path,在map找加L和加R的 x=t.append("L"); it1=m.find(x); y=t1.append("R"); it2=m.find(y); if(it1!=m.end()){ q.push({it1->first,it1->second}); //cout<<"left son is in"<<endl; } if(it2!=m.end()){ q.push({it2->first,it2->second}); //cout<<"rigth son is in"<<endl; } } } bool input(){ string str; while(cin>>str){ string path, value1; int value, p, length; if(str == "()") break; length = str.length(); p = str.find(','); //,的位置 value1 = str.substr(1,p-1); value = atoi(value1.c_str()); //这个地方把string转换成int path = str.substr(p+1,length-1-(p+1)); it=m.find(path); if(it!=m.end()) path="XXX"; m[path] = value; } return !cin.eof(); } int main() { while(input()){ //这里的输入,没有循环输入的话就会wronganswer 就因为这个问题花费了很久时间 //int len=m.size(); //for(it=m.begin();it!=m.end();it++) cout<<it->first<<" "<<it->second<<endl; //cout<<endl; levelordertravel(); // for(int i=0;i<v.size();i++){ // cout<<v[i]; // if(i!=v.size()-1) cout<<" "; // } // cout<<endl; if(m.size()!=0) cout<<"not complete"<<endl; if(m.size()==0){ for(int i=0;i<v.size();i++){ cout<<v[i]; if(i!=v.size()-1) cout<<" "; } cout<<endl; } m.clear(); v.clear(); } return 0; }</span>
UVa 122 Trees on the level的更多相关文章
- UVA.122 Trees on the level(二叉树 BFS)
UVA.122 Trees on the level(二叉树 BFS) 题意分析 给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete 代码总览 #include ...
- UVA 122 -- Trees on the level (二叉树 BFS)
Trees on the level UVA - 122 解题思路: 首先要解决读数据问题,根据题意,当输入为“()”时,结束该组数据读入,当没有字符串时,整个输入结束.因此可以专门编写一个rea ...
- uva 122 trees on the level——yhx
题目如下:Given a sequence of binary trees, you are to write a program that prints a level-order traversa ...
- UVa 122 Trees on the level(二叉树层序遍历)
Trees are fundamental in many branches of computer science. Current state-of-the art parallel comput ...
- UVa 122 Trees on the level(链式二叉树的建立和层次遍历)
题目链接: https://cn.vjudge.net/problem/UVA-122 /* 问题 给出每个节点的权值和路线,输出该二叉树的层次遍历序列. 解题思路 根据输入构建链式二叉树,再用广度优 ...
- UVa 122 Trees on the level (动态建树 && 层序遍历二叉树)
题意 :输入一棵二叉树,你的任务是按从上到下.从左到右的顺序输出各个结点的值.每个结 点都按照从根结点到它的移动序列给出(L表示左,R表示右).在输入中,每个结点的左 括号和右括号之间没有空格,相邻 ...
- UVA - 122 Trees on the level (二叉树的层次遍历)
题意:给定结点值和从根结点到该结点的路径,若根到某个叶结点路径上有的结点输入中未给出或给出超过一次,则not complete,否则层次遍历输出所有结点. 分析:先建树,建树的过程中,沿途结点都申请了 ...
- 内存池技术(UVa 122 Tree on the level)
内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时, ...
- Trees on the level UVA - 122 复习二叉树建立过程,bfs,queue,strchr,sscanf的使用。
Trees are fundamental in many branches of computer science (Pun definitely intended). Current state- ...
随机推荐
- Virtual Box配置CentOS7网络(图文教程)
之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- Yeoman 官网教学案例:使用 Yeoman 构建 WebApp
STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...
- OEL上使用yum install oracle-validated 简化主机配置工作
环境:OEL 5.7 + Oracle 10.2.0.5 RAC 如果你正在用OEL(Oracle Enterprise Linux)系统部署Oracle,那么可以使用yum安装oracle-vali ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- 【干货分享】流程DEMO-人员调动流程
流程名: 调动 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单: 流程: 图片:3.png DEMO包下载: http://files.cnblogs.com ...
- JAVA设计模式之模板模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
- x01.os.23: 制作 linux LiveCD
1.首先运行如下命令 sudo apt-get install wget bc build-essential gawk genisoimage 2.下载如下资源,make all 即可 http: ...