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- ...
随机推荐
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- Js 变量声明提升和函数声明提升
Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...
- javascript之Object.defineProperty的奥妙
直切主题 今天遇到一个这样的功能: 写一个函数,该函数传递两个参数,第一个参数为返回对象的总数据量,第二个参数为初始化对象的数据.如: var o = obj (4, {name: 'xu', age ...
- Javascript正则对象方法与字符串正则方法总结
正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...
- Jquery(1)
鼠标点击事件: <input type="button" value="测试" onclick="test()" /> < ...
- Android—基于GifView显示gif动态图片
android中显示gif动态图片用到了开源框架GifView 1.拷GifView.jar到自己的项目中. 2.将自己的gif图片拷贝到drawable文件夹 3.在xml文件中设置基本属性: &l ...
- C语言可以开发哪些项目?
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...
- 如何使用dos命令查看MySQL当前使用的数据库?
1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:
- RavenDB官网文档翻译系列第一
本系列文章主要翻译自RavenDB官方文档,有些地方做了删减,有些内容整合在一起.欢迎有需要的朋友阅读.毕竟还是中文读起来更亲切吗.下面进入正题. 起航 获取RavenDB RavenDB可以通过Nu ...
- 透过浏览器看HTTP缓存
作为前端开发人员,对于我们的站点或应用的缓存机制我们能做的似乎不多,但这些却是与我们关注的性能息息相关的部分,站点没有做任何缓存机制,我们的页面可能会因为资源的下载和渲染变得很慢,但大家都知道去找前端 ...