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相关推荐

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

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

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

  3. [UVa 122] Trees On the Level

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

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

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

  5. 【可运行,刘汝佳代码】Trees on the level UVA - 122

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

  6. UVA 122 Trees on the level 二叉树 广搜

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

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

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

  8. UVa 122 Trees on the level

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

  9. (二叉树的动态创建与bfs)树的层次遍历

    题目: 例:输入一棵二叉树,你的任务是按从上到下,从左到右的顺序输出每一个节点的值.每个节点都按照从根节点到它的移动序列给出(L表示左,R表示右).在输入中,每个节点的左括号和右括号之间没有空格,相邻 ...

  10. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

最新文章

  1. 终端读写命令 -- read write wall
  2. eclipse恢复默认布局
  3. 【Android应用开发】Android Studio - MAC 版 - 快捷键详解
  4. 敲代码就是一把梭_2020必看!开发五年的大佬日常工作中所使用的java代码技巧...
  5. HDOJ 2015 偶数求和 解题报告
  6. OpenCASCADE:MFC示例
  7. 基层数字化治理困境如何破局?
  8. 两台电脑可以用同一IP上网吗?
  9. 原生javascript之实战 轮播图
  10. 笔记_SQLite入门
  11. 【转载保存】RunTime.getRunTime().addShutdownHook 添加钩子
  12. Windows 游戏之父,DirectX 作者 Eric Engstrom 意外去世,享年55岁
  13. [渝粤教育] 山东财经大学 国际经济学 参考 资料
  14. 剑指offer之【把数组排成最小的数】☆
  15. HTML——校友会(bootstrap)
  16. css3 水纹效果(仿写阿里云)
  17. HSPF(Hydrological Simulation Program Fortran)模型应用
  18. mongodb java 内嵌文档_MongoDB 内嵌文档
  19. 如何进行seo搜索引擎优化(搜索引擎SEO优化)
  20. 《计算机视觉之三维重建》笔记1-数学基础

热门文章

  1. 人工智能历经风雨二十载 AI专用芯片成蓝海
  2. 使用CSharp编写Google Protobuf插件
  3. wpf prism IRegionManager 和IRegionViewRegistry
  4. 谷歌浏览器跨域报错解决办法
  5. Android用户界面开发(16):ImageSwitcher
  6. 典型的开发国内小项目没失败的经验分享
  7. linux 下DHCP的安装
  8. 在Red Hat Linux中自动运行程序
  9. scrollWidth,clientWidth,offsetWidth的区别
  10. 风险案例-25期-与有过合作经历客户在新合同约定中过于简单、范围不明确,导致客户对新需求工作量不认可...