题意:给出一棵二叉树,按照从上到下,从左到右输出所有节点的值,如果有一个节点没有赋值或者被多次赋值则输出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相关推荐

  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 二叉树 广搜

    题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...

  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. 【可运行,刘汝佳代码】Trees on the level UVA - 122

    立志用最少的代码做最高效的表达 Trees are fundamental in many branches of computer science (Pun definitely intended) ...

  7. Trees on the level UVA - 122 (二叉树的层次遍历)

    题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...

  8. UVA 10214 Trees in a Wood

    https://vjudge.net/problem/UVA-10214 题意:你站在原点,每个坐标位置有一棵高度相同的树,问能看到多少棵树 ans=Σ gcd(x,y)=1 欧拉函数搞搞 #incl ...

  9. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. ubuntu12.04 mysql 安装_Ubuntu 12.04 安装 配置 访问MySQL
  2. 【内推】腾讯优图(深圳)实验室招计算机视觉算法实习生
  3. DPDK 数据包捕获基本流程(十六)
  4. 运维利器-ClusterShell集群管理操作记录
  5. [转] Bookmarklet(书签工具)编写指南
  6. leetcode59. 螺旋矩阵 II
  7. 响应式滚动图懒加载 element ui el-carousel 组件优化代码
  8. 【iOS开发】修改图片的大小分辨率 使用mac
  9. redis、mysql、和php原生array数组效率对比
  10. react 使用cookie react-cookies
  11. 四则运算2之设计思路篇
  12. C语言实现QQ刷屏,绝对实用
  13. studio无法重命名(can not rename root module)
  14. DIY 简单又好吃的香果魔芋
  15. 自动驾驶是一门怎样的生意?盘点5家创业公司商业落地的3条逻辑...
  16. 【计算机网络学习笔记13】交换技术(下)
  17. C++ windows下判断鼠标点击及获取像素点
  18. Java Web程序设计第12章课后第1题
  19. Dart vs Swift
  20. linux下cpu性能测试软件,Linux系统性能测试工具(四)——CPU性能测试工具之super_pi、sysbench...

热门文章

  1. matlab绘制X,Y二维散点图并标出序号
  2. Excel公式与函数案例速查手册/电脑技巧从入门到精通丛书
  3. 【Python学习系列九】Python机器学习库scikit-learn实现SVM案例
  4. 2009-08-19股市大跌分析(转载)
  5. 开机出现grub rescue无法进入系统 恢复ubuntu系统下grub引导 windows xp和ubuntu9.10双系统引导程序的修复
  6. windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
  7. vue中引入jquery
  8. toString()与new String ()用法区别
  9. JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。
  10. Java的知识点28——线程的生命周期