Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu

Submit Status

Description

 

Background

Trees are fundamental in many branches of computer science. Current state-of-the art parallel computers such as Thinking Machines' CM-5 are based on fat trees. Quad- and octal-trees are fundamental to many algorithms in computer graphics.

This problem involves building and traversing binary trees.

The Problem

Given a sequence of binary trees, you are to write a program that prints a level-order traversal of each tree. In this problem each node of a binary tree contains a positive integer and all binary trees have have fewer than 256 nodes.

In a level-order traversal of a tree, the data in all nodes at a given level are printed in left-to-right order and all nodes at level k are printed before all nodes at level k+1.

For example, a level order traversal of the tree

is: 5, 4, 8, 11, 13, 4, 7, 2, 1.

In this problem a binary tree is specified by a sequence of pairs (n,s) where n is the value at the node whose path from the root is given by the string s. A path is given be a sequence of L's andR's where L indicates a left branch and R indicates a right branch. In the tree diagrammed above, the node containing 13 is specified by (13,RL), and the node containing 2 is specified by (2,LLR). The root node is specified by (5,) where the empty string indicates the path from the root to itself. A binary tree is considered to be completely specified if every node on all root-to-node paths in the tree is given a value exactly once.

The Input

The input is a sequence of binary trees specified as described above. Each tree in a sequence consists of several pairs (n,s) as described above separated by whitespace. The last entry in each tree is (). No whitespace appears between left and right parentheses.

All nodes contain a positive integer. Every tree in the input will consist of at least one node and no more than 256 nodes. Input is terminated by end-of-file.

The Output

For each completely specified binary tree in the input file, the level order traversal of that tree should be printed. If a tree is not completely specified, i.e., some node in the tree is NOT given a value or a node is given a value more than once, then the string ``not complete'' should be printed.

Sample Input

(11,LL) (7,LLL) (8,R)
(5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()
(3,L) (4,R) ()

Sample Output

5 4 8 11 13 4 7 2 1
not complete
题解:
题意很简单,就是给你一棵二叉树,让你从高到低,从左到右输出来;
为什么要用链表,由于256组数据,当节点全在最左枝上的时候,普通二叉树的值是1<<255这么大的数用大数才能保存,所以要考虑用链表来实现;
因为head没有申请内存错了半天,又因为竟然还有(,)()这组数据,还需要加个failed来判断这种情况。。。。不过最后终于ac了;
代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int MAXN=10010;
int ans[MAXN],flot,k;
bool failed;
struct Node{
bool h_v;
int v;
Node *L,*R;
Node():h_v(false),L(NULL),R(NULL){}
}*head;
void addnode(int v,char *s){
//printf("%s %d\n",s,v);
Node *cur=head;
for(int i=0;s[i];i++){
if(s[i]=='L'){
if(cur->L==NULL)cur->L=new Node();
cur=cur->L;
}
else if(s[i]=='R'){
if(cur->R==NULL)cur->R=new Node();
cur=cur->R;
}
}
if(cur->h_v)failed=true;//注意要加上failed判断没有出现数字的情况;
cur->v=v;
cur->h_v=true;
}
void print(){
queue<Node*>q;
Node *cur=head;
q.push(head);
while(!q.empty()){
cur=q.front();
q.pop();
if(cur->h_v==0)flot=0;
if(!flot)break;
ans[k++]=cur->v;
if(cur->L!=NULL)q.push(cur->L);
if(cur->R!=NULL)q.push(cur->R);
}
if(flot&&!failed)for(int i=0;i<k;i++){
if(i)printf(" ");
printf("%d",ans[i]);
}
else printf("not complete");
puts("");
}
void freenode(Node *cur){
if(cur==NULL)return;
freenode(cur->L);
freenode(cur->R);
free(cur);
}
int main(){
char s[MAXN];
head=new Node();
failed=false;
while(~scanf("%s",s)){
if(!strcmp(s,"()")){
flot=1;
k=0;
print();
freenode(head);
head=new Node();
failed=false;
continue;
}
int v;
sscanf(&s[1],"%d",&v);
addnode(v,strchr(s,',')+1);
}
return 0;
}

  

UVA122-Trees on the level(链二叉树)的更多相关文章

  1. hdu 1622 Trees on the level(二叉树的层次遍历)

    题目链接:https://vjudge.net/contest/209862#problem/B 题目大意: Trees on the level Time Limit: 2000/1000 MS ( ...

  2. UVA 122 -- Trees on the level (二叉树 BFS)

     Trees on the level UVA - 122  解题思路: 首先要解决读数据问题,根据题意,当输入为“()”时,结束该组数据读入,当没有字符串时,整个输入结束.因此可以专门编写一个rea ...

  3. Uva122 Trees on the level

    Background Trees are fundamental in many branches of computer science. Current state-of-the art para ...

  4. [ An Ac a Day ^_^ ] hdu 1662 Trees on the level 数据结构 二叉树

    紫书上的原题 正好学数据结构拿出来做一下 不知道为什么bfs的队列一定要数组模拟…… 还可以练习一下sscanf…… #include<stdio.h> #include<iostr ...

  5. uva-122 Trees on the level(树的遍历)

    题目: 给出一棵树的表示,判断这棵树是否输入正确,如果正确就按层次遍历输出所有的结点,错误的话就输出not complete. 思路: 根据字符串中树的路径先将树建起来,在增加结点和层次遍历树的时候判 ...

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

    题意:给定结点值和从根结点到该结点的路径,若根到某个叶结点路径上有的结点输入中未给出或给出超过一次,则not complete,否则层次遍历输出所有结点. 分析:先建树,建树的过程中,沿途结点都申请了 ...

  7. Trees on the level UVA - 122 复习二叉树建立过程,bfs,queue,strchr,sscanf的使用。

    Trees are fundamental in many branches of computer science (Pun definitely intended). Current state- ...

  8. Trees on the level(指针法和非指针法构造二叉树)

    Trees on the level Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. UVA.122 Trees on the level(二叉树 BFS)

    UVA.122 Trees on the level(二叉树 BFS) 题意分析 给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete 代码总览 #include ...

随机推荐

  1. linux杂记(一)各硬件装置在linux中的代号

    装置 装置在linux内的代号 IDE硬盘机 /dev/hd[a-d] SCSI硬盘机 /dev/sd[a-p] U盘 /dev/sd[a-p](与SCSI硬盘一样) CDROM /dev/cdrom ...

  2. Could not find class 'XXX.activity‘', referenced from method 'YYYY'

    Could not find class 'XXX.activity‘', referenced from method 'YYYY'的解决方案: 出现这个错误.是由于eclipse升级ADT所导致的 ...

  3. HTML5 canvas易错点

    一.画布的默认宽高 <canvas id="myCanvas" style="border:1px solid black;"> 你的浏览器不支持h ...

  4. Html 笔记1

    标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. <h1>这是标题</h1> 段落是通过 <p> 标签进行定义的. ...

  5. 基于Web的系统测试方法

    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战.基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否 ...

  6. Linux----mktemp命令的用法

    命令说明: mktemp命令用于临时文件和临时目录.它的主要特点就是可以做到每次执行mktemp时产生文件和目录都不重名: 这个特性就保证了多个session执行同一脚本都是安全的. 命令用法: 格式 ...

  7. CeontOS7安装ansible

    安装方法一. 第一步:安装epel rpm -ivh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 第二步:安装a ...

  8. 贴片方式COB COF COG

    英文简称: COB英文全称: Chip On Board中文全称: 通过邦定将IC裸片固定于印刷线路板上 英文简称: COF 英文全称: Chip On FPC 中文全称: 将IC固定于柔性线路板上 ...

  9. 两个DIV,左DIV宽度固定,右DIV自动填满剩余空间

    <style type="text/css"> #main{ width:98%; } #sidebar{ float:left; width:200px; backg ...

  10. iOS-BLE蓝牙开发

    Demo地址:WEBlueToothManager 在写这个博客之前,空余时间抽看了近一个月的文档和Demo,系统给的解释很详细,接口也比较实用,唯独有一点,对于设备 的唯一标示,网上众说纷纭,在这里 ...