题目链接: https://vjudge.net/problem/UVA-122

  题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not complete"

  解题思路: 这道题就是硬搞就可以了, 参考紫书去做的, 首先处理输入就是非常麻烦的事情, 用到了sscanf就会轻松很多, 看来C中还是有很多很多的好用的标准库函数可以拿来用的, 例如还有本题中的strchr() , 处理完输入, 然后就去构造数。 然后广搜一遍即可

  代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <iterator>
#include <cmath>
#include <algorithm>
#include <stack>
#include <deque>
#include <map>
#include <set>
#include <queue>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define mem0(a) memset(a,0,sizeof(a))
#define sca(x) scanf("%d",&x)
#define de printf("=======\n")
typedef long long ll;
using namespace std;struct node {bool yo;int value;node * l;node * r;node() {yo = false;value = 0;l = r = NULL;}};
node * root;
bool failed;
vector<int> ans;
int cnt;node * new_node() {return new node();
}void addnode( int v, char * p ) {int n = (int)strlen(p);node * u = root;for( int i = 0; i < n; i++ ) {if( p[i] == 'L' ) {if( u->l == NULL ) u->l = new_node();u = u->l;}else if( p[i] == 'R' ) {if( u->r == NULL ) u->r = new_node();u = u->r;}}if( u->yo == true ) {failed = true;return;}u->value = v;u->yo = true;
}bool readin() {char s[290];while( 1 ) {if( scanf( "%s", s ) != 1 ) return false;if( strcmp(s, "()") == 0 ) break;int v;sscanf( &s[1], "%d", &v );addnode( v, strchr(s, ',')+1 );}return true;
}bool bfs() {queue<node *> q;q.push(root);while( !q.empty() ) {node * temp = q.front();q.pop();if( temp->yo == false ) return 0;ans.push_back(temp->value);if( temp->l ) q.push(temp->l);if( temp->r ) q.push(temp->r);}return 1;
}
int main() {while(1) {cnt = 0;failed = 0;root = new_node();ans.clear();if( !readin() ) break;if( !failed && bfs() ) {int len = (int)ans.size();for (int i = 0; i < len; i++)printf("%d%c", ans[i], i == len - 1 ? '\n' : ' ');}else {puts( "not complete" );}}return 0;
}

View Code

  思考: 了解到一些很好用函数, 然后知道了每次对指针进行操作的时候都要判空, 我觉得数据结构和数学两大块儿真的是具重要, 原本打算打完今年的区域赛就退役了,但是为了学习各种的数据结构和数学, 我还是得继续打下去啊.....刷题还是不能断啊老哥, 然后我是真的想进橘子娱乐啊........我他妈是真的想进啊, 和我实在是太适合了, 然后现在就是非常非常非常难熬了.......

转载于:https://www.cnblogs.com/FriskyPuppy/p/7496562.html

UVA 122 Trees on the level 二叉树 广搜相关推荐

  1. 【日常学习】【指针二叉树+BFS】Uva - 122 Trees on the level题解

    作为一个传统型的树盲,不得不把树重新学习一次.通常我是不太喜欢指针的,但这样写下来感觉还能接受. 题目来源是ACM DUKE 1993 Uva 122 杭电也有这道题  这道题目基本是照着ruka抄来 ...

  2. [UVa 122] Trees On the Level

    Trees On the Level 竟然还有 (,) () 这种东西!!! #include <cstdio> #include <cstring> #include < ...

  3. UVa 122 Trees on the level

    题意:给出一棵二叉树,按照从上到下,从左到右输出所有节点的值,如果有一个节点没有赋值或者被多次赋值则输出not complete 看的紫书照着敲的= = 先要将输入进来的值建成一颗二叉树(定义一个二叉 ...

  4. 122 - Trees on the level(模拟内存池解法)

    PS:题目和动态分配内存解法,可以查看:122 - Trees on the level(动态分配空间解法) PS:模拟内存池的原理简单的说就是先初始化一个空闲队列,当需要资源时,直接从队首获取,当资 ...

  5. 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) ...

  6. 二叉树的深搜(DFS)与广搜(BFS)

    转载自: https://blog.csdn.net/u011613367/article/details/50950408 数据结构中的有两个比较重要的算法.深度优先搜索和广度优先搜索. 二叉树中的 ...

  7. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

  8. 深搜(DFS) 广搜(BFS)

    搜索的核心概念 问题求解树 是一种思维逻辑层面的结构,而非程序中的实际存储结构:思维结构可以表示无限的概念 设计搜索算法的核心关键点 设计问题求解树的状态 搜索剪枝和优化 在问题求解树搜索过程中,对于 ...

  9. 八数码 poj 1077 广搜 A* IDA*

    经典的八数码问题,有人说不做此题人生不完整,哈哈. 状态总数是9! = 362880 种,不算太多,可以满足广搜和A*对于空间的需求. 状态可以每次都动态生成,也可以生成一次存储起来,我用的动态生成, ...

最新文章

  1. 文件读写以及数据处理
  2. centos java 指令_Centos 命令方式下载JDK1.7
  3. python生成回文数
  4. 机器学习中的不平衡分类方法(part2)--模型评估与选择
  5. cmd编译java文件中文乱码_乱码 HelloWorld 世界你好 cmd 执行输出的中文java 显示乱码 解决 另附 win无法执行编译运行javac java编译文件的解决方案...
  6. 关闭Wordpress修订功能,清除“Revision”的方法
  7. springboot实现快速整合mybatis+mysql
  8. 输入这个命令之后,FinalShell连接不上地推主机了
  9. 创建目录 java_java创建文件和目录
  10. HTML DOM对象的属性和方法介绍(原生JS方法)
  11. Installshield2008教程
  12. 计算机四级c语言题库及答案,计算机四级考试题库及答案
  13. (转)不看绝对后悔的Linux三剑客之awk实战精讲
  14. 《软件测试》第十二章 文档测试
  15. 在Delphi程序中调用控制面板设置功能
  16. 常用的Eclipse 快捷键
  17. win10软件字符乱码解决
  18. 企业平台云化如何迁移?迁移的基本思路是什么?
  19. Vlan和pvlan全面解析
  20. python3下载mapbox矢量切片

热门文章

  1. centos 6.x 升级内核
  2. HDU 3058 Generator [AC自动机+期望DP]
  3. Linux下的截图工具 KSnapshot
  4. oracle12c审计功能,oracle 12c开启关闭统一审计
  5. ios 苹果审核常见被拒问题
  6. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件
  7. Xamarin Android项目真机测试闪退
  8. C#开发Unity游戏教程之Scene视图与脚本的使用
  9. python中break可以用在for和if中吗_Python的for和break循环结构中使用else语句的技巧...
  10. 重磅!UCSF的研究者利用脑机接口首次让患者输出完整句子,展现恢复语言沟通的潜力...