UVa 122 Trees on the level
题意:给出一棵二叉树,按照从上到下,从左到右输出所有节点的值,如果有一个节点没有赋值或者被多次赋值则输出not complete
看的紫书照着敲的= = 先要将输入进来的值建成一颗二叉树(定义一个二叉树的节点,新建节点的函数,添加节点的函数),再对建好的二叉树遍历(BFS)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<vector> 6 #include<queue> 7 #include<algorithm> 8 using namespace std; 9 10 typedef long long LL; 11 const int maxn=10000+5; 12 char s[maxn]; 13 int failed; 14 vector<int> ans; 15 16 struct Node{ //建立二叉树的一个结点 17 bool have_value;//判断该结点是否被赋值过 18 int v; 19 Node *left,*right; 20 Node():have_value(false),left(NULL),right(NULL){}//构造函数,即为赋初值 21 }; 22 23 Node*root; 24 Node* newnode() { //创建一个新的结点 25 return new Node(); 26 } 27 28 void addnode(int v,char *s){ //添加一个新的 结点 29 int n=strlen(s); 30 Node* u=root; 31 for(int i=0;i<n;i++) 32 if(s[i]=='L'){ 33 if(u->left==NULL) u->left=newnode();//如果左边的结点不存在,建立新的结点 34 u=u->left; //向左走 35 } 36 else if(s[i]=='R'){ 37 if(u->right==NULL) u->right=newnode();//如果右边的结点不存在,建立新的结点 38 u=u->right;//向右走 39 } 40 if(u->have_value) failed=true; //如果已经赋过值 ,输入有误 41 u->v=v;//标记 42 u->have_value=true; 43 } 44 45 bool read_input(){ 46 failed=false; 47 root=newnode(); 48 for(;;){ 49 if(scanf("%s",&s)!=1) return false; 50 if(!strcmp(s,"()")) break; 51 int v; 52 sscanf(&s[1],"%d",&v); 53 addnode(v,strchr(s,',')+1); 54 } 55 return true; 56 } 57 58 59 60 61 bool bfs(vector<int>& ans){ 62 queue<Node*> q; 63 ans.clear(); 64 q.push(root); 65 while(!q.empty()){ 66 Node* u=q.front();q.pop(); 67 if(!u->have_value) return false;//有结点没有被赋值,输出有误 68 ans.push_back(u->v);//增加到输出序列尾部 69 if(u->left!=NULL) q.push(u->left);//如果存在左子结点,放进队列 70 if(u->right!=NULL) q.push(u->right);// 如果存在右子结点,放进队列 71 } 72 return true; 73 } 74 75 int main() 76 { 77 int i; 78 while(read_input()){ 79 if(failed||!bfs(ans)) printf("not complete\n"); 80 else{ 81 for(i=0;i<ans.size()-1;i++) 82 printf("%d ",ans[i]); 83 printf("%d\n",ans[i]); 84 } 85 } 86 return 0; 87 }
View Code
数据结构学得好艰辛啊啊啊啊啊= =
转载于:https://www.cnblogs.com/wuyuewoniu/p/4324629.html
UVa 122 Trees on the level相关推荐
- 【日常学习】【指针二叉树+BFS】Uva - 122 Trees on the level题解
作为一个传统型的树盲,不得不把树重新学习一次.通常我是不太喜欢指针的,但这样写下来感觉还能接受. 题目来源是ACM DUKE 1993 Uva 122 杭电也有这道题 这道题目基本是照着ruka抄来 ...
- [UVa 122] Trees On the Level
Trees On the Level 竟然还有 (,) () 这种东西!!! #include <cstdio> #include <cstring> #include < ...
- UVA 122 Trees on the level 二叉树 广搜
题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...
- 122 - Trees on the level(模拟内存池解法)
PS:题目和动态分配内存解法,可以查看:122 - Trees on the level(动态分配空间解法) PS:模拟内存池的原理简单的说就是先初始化一个空闲队列,当需要资源时,直接从队首获取,当资 ...
- 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) ...
- 【可运行,刘汝佳代码】Trees on the level UVA - 122
立志用最少的代码做最高效的表达 Trees are fundamental in many branches of computer science (Pun definitely intended) ...
- Trees on the level UVA - 122 (二叉树的层次遍历)
题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...
- UVA 10214 Trees in a Wood
https://vjudge.net/problem/UVA-10214 题意:你站在原点,每个坐标位置有一棵高度相同的树,问能看到多少棵树 ans=Σ gcd(x,y)=1 欧拉函数搞搞 #incl ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
最新文章
- ubuntu12.04 mysql 安装_Ubuntu 12.04 安装 配置 访问MySQL
- 【内推】腾讯优图(深圳)实验室招计算机视觉算法实习生
- DPDK 数据包捕获基本流程(十六)
- 运维利器-ClusterShell集群管理操作记录
- [转] Bookmarklet(书签工具)编写指南
- leetcode59. 螺旋矩阵 II
- 响应式滚动图懒加载 element ui el-carousel 组件优化代码
- 【iOS开发】修改图片的大小分辨率 使用mac
- redis、mysql、和php原生array数组效率对比
- react 使用cookie react-cookies
- 四则运算2之设计思路篇
- C语言实现QQ刷屏,绝对实用
- studio无法重命名(can not rename root module)
- DIY 简单又好吃的香果魔芋
- 自动驾驶是一门怎样的生意?盘点5家创业公司商业落地的3条逻辑...
- 【计算机网络学习笔记13】交换技术(下)
- C++ windows下判断鼠标点击及获取像素点
- Java Web程序设计第12章课后第1题
- Dart vs Swift
- linux下cpu性能测试软件,Linux系统性能测试工具(四)——CPU性能测试工具之super_pi、sysbench...
热门文章
- matlab绘制X,Y二维散点图并标出序号
- Excel公式与函数案例速查手册/电脑技巧从入门到精通丛书
- 【Python学习系列九】Python机器学习库scikit-learn实现SVM案例
- 2009-08-19股市大跌分析(转载)
- 开机出现grub rescue无法进入系统 恢复ubuntu系统下grub引导 windows xp和ubuntu9.10双系统引导程序的修复
- windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
- vue中引入jquery
- toString()与new String ()用法区别
- JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。
- Java的知识点28——线程的生命周期