UVa122-Trees on the level
1.题目描述:点击链接
2.问题分析:
简单地来说,就是输入一组字符串,表示二叉树上某些节点的值和位置,这些节点不一定可以组成一颗完整的二叉树,可能出现缺少某个节点或者某个节点冗余的情况。
需要我们进行判断是否能组成一颗完整的二叉树,若可以按照由上到下,由左到右的顺序输出每个节点的值,若不能则输出not complete
3.输入数据分析:
题目上给出节点的个数不超过256个,如果按照最坏的情况去考虑,256个节点组成一条单链,那么最后一个节点的编号会非常大,所以不能用暴力去解决。
4.算法设计:
由于节点的不确定,最好构建一个二叉树,然后往树里添加新的节点,最后使用bfs查找是否存在缺少或者多余的情况。
5.代码:
1 #include<iostream> 2 #include<vector> 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<cstring> 6 #include<queue> 7 #include<string.h> 8 using namespace std; 9 const int maxn=256+10; 10 char s[maxn]; 11 bool failed; 12 struct Node{ 13 int v; 14 bool have_value; 15 Node *left,*right; 16 Node():have_value(false),left(NULL),right(NULL){} 17 }; 18 Node *root; 19 Node *newnode(){return new Node();} 20 void addnode(int v,char *s){ 21 int n=strlen(s); 22 Node *u=root; 23 for(int i=0;i<n;i++) 24 { 25 if(s[i]=='L'){ 26 if(u->left==NULL)u->left=newnode(); 27 u=u->left; 28 } 29 else if(s[i]=='R'){ 30 if(u->right==NULL)u->right=newnode(); 31 u=u->right; 32 } 33 } 34 if(u->have_value==1) failed=true; 35 u->have_value=1; 36 u->v=v; 37 } 38 bool read_input(){ 39 failed=false; 40 root=newnode(); 41 for(;;){ 42 if(scanf("%s",s)==EOF)return false; 43 if(strcmp(s,"()")==0)break; 44 int v; 45 sscanf(&s[1],"%d",&v); 46 addnode(v,strchr(s,',')+1); 47 } 48 return true; 49 } 50 bool bfs(vector<int>&ans){ 51 queue<Node*>q; 52 ans.clear(); 53 q.push(root); 54 while(!q.empty()){ 55 Node* u=q.front();q.pop(); 56 if(!u->have_value)return false; 57 ans.push_back(u->v); 58 if(u->left!=NULL)q.push(u->left); 59 if(u->right!=NULL)q.push(u->right); 60 } 61 return true; 62 } 63 int main() 64 { 65 freopen("in.txt","r",stdin); 66 while(1) 67 { 68 if(read_input()==0)break; 69 vector<int>ans; 70 if(!failed&&bfs(ans)){ 71 int n=ans.size(); 72 for(int i=0;i<n;i++) 73 printf("%d%c",ans[i],i==n-1?'\n':' '); 74 } 75 else{ 76 printf("not complete\n"); 77 } 78 } 79 return 0; 80 }
转载于:https://www.cnblogs.com/bo2000/p/9827615.html
UVa122-Trees on the level相关推荐
- UVA122 树的层次遍历 Trees on the level(两种方法详解)
UVA122 树的层次遍历 Trees on the level 输入: (11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ...
- 122 - Trees on the level(模拟内存池解法)
PS:题目和动态分配内存解法,可以查看:122 - Trees on the level(动态分配空间解法) PS:模拟内存池的原理简单的说就是先初始化一个空闲队列,当需要资源时,直接从队首获取,当资 ...
- [UVa 122] Trees On the Level
Trees On the Level 竟然还有 (,) () 这种东西!!! #include <cstdio> #include <cstring> #include < ...
- 【日常学习】【指针二叉树+BFS】Uva - 122 Trees on the level题解
作为一个传统型的树盲,不得不把树重新学习一次.通常我是不太喜欢指针的,但这样写下来感觉还能接受. 题目来源是ACM DUKE 1993 Uva 122 杭电也有这道题 这道题目基本是照着ruka抄来 ...
- 【可运行,刘汝佳代码】Trees on the level UVA - 122
立志用最少的代码做最高效的表达 Trees are fundamental in many branches of computer science (Pun definitely intended) ...
- UVA 122 Trees on the level 二叉树 广搜
题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...
- Trees on the level UVA - 122 (二叉树的层次遍历)
题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...
- UVa 122 Trees on the level
题意:给出一棵二叉树,按照从上到下,从左到右输出所有节点的值,如果有一个节点没有赋值或者被多次赋值则输出not complete 看的紫书照着敲的= = 先要将输入进来的值建成一颗二叉树(定义一个二叉 ...
- (二叉树的动态创建与bfs)树的层次遍历
题目: 例:输入一棵二叉树,你的任务是按从上到下,从左到右的顺序输出每一个节点的值.每个节点都按照从根节点到它的移动序列给出(L表示左,R表示右).在输入中,每个节点的左括号和右括号之间没有空格,相邻 ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
最新文章
- 终端读写命令 -- read write wall
- eclipse恢复默认布局
- 【Android应用开发】Android Studio - MAC 版 - 快捷键详解
- 敲代码就是一把梭_2020必看!开发五年的大佬日常工作中所使用的java代码技巧...
- HDOJ 2015 偶数求和 解题报告
- OpenCASCADE:MFC示例
- 基层数字化治理困境如何破局?
- 两台电脑可以用同一IP上网吗?
- 原生javascript之实战 轮播图
- 笔记_SQLite入门
- 【转载保存】RunTime.getRunTime().addShutdownHook 添加钩子
- Windows 游戏之父,DirectX 作者 Eric Engstrom 意外去世,享年55岁
- [渝粤教育] 山东财经大学 国际经济学 参考 资料
- 剑指offer之【把数组排成最小的数】☆
- HTML——校友会(bootstrap)
- css3 水纹效果(仿写阿里云)
- HSPF(Hydrological Simulation Program Fortran)模型应用
- mongodb java 内嵌文档_MongoDB 内嵌文档
- 如何进行seo搜索引擎优化(搜索引擎SEO优化)
- 《计算机视觉之三维重建》笔记1-数学基础
热门文章
- 人工智能历经风雨二十载 AI专用芯片成蓝海
- 使用CSharp编写Google Protobuf插件
- wpf prism IRegionManager 和IRegionViewRegistry
- 谷歌浏览器跨域报错解决办法
- Android用户界面开发(16):ImageSwitcher
- 典型的开发国内小项目没失败的经验分享
- linux 下DHCP的安装
- 在Red Hat Linux中自动运行程序
- scrollWidth,clientWidth,offsetWidth的区别
- 风险案例-25期-与有过合作经历客户在新合同约定中过于简单、范围不明确,导致客户对新需求工作量不认可...