UVA-122-TREE ON THE LEVEL

原创 2016年06月01日 11:08:49

UVA-122-TREE ON THE LEVEL

subject

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

picture28

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 and R’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

My code:

//uva_122_trees_on_the_level
#include "iostream"
#include "cstdio"
#include "cmath"
#include "cstring"
#include "algorithm"
#include "queue"



#define MAX 10010

using namespace std;

struct Node  {
    bool have_v;
    int v;
    Node *L,*R;
    Node():have_v(have_v = false) ,L(NULL),R(NULL){}
}*head;

int ans[MAX], flt,k;

bool faild ;

void addNode (int v, char *s){
    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->have_v)faild=true;
    cur->v=v;
    cur->have_v=true;

}

void print() {
    queue<Node*>q;
    Node *cur=head;
    q.push(head);
    while(!q.empty()){
        cur=q.front();
        q.pop();
        if(cur->have_v==0)flt=0;
        if(!flt)break;
        ans[k++]=cur->v;
        if(cur->L!=NULL)q.push(cur->L);
        if(cur->R!=NULL)q.push(cur->R);
    }
    if(flt&&!faild)for(int i=0;i<k;i++){
        if(i)printf(" ");
        printf("%d",ans[i]);
    }
    else printf("not complete");
    puts("");
}

void remov_Node (Node *cur){
    remov_Node(cur->L);
    remov_Node(cur->R);
    remov_Node(cur);
}

int main (){
    char s[MAX];
    head = new Node();
    while(~scanf("%s",s)){
        if (!strcmp(s, "()")) {
            flt = 1;
            k = 0;
            print();
            remov_Node(head);
            head = new Node;
            faild = false;
            continue;

        }
        int v;
        sscanf(&s[1],"%d",&v );
        addNode(v,strchr(s,',')+1);


    }
    return 0;


}




版权声明:本文为博主原创文章,转载请联系1453799803@qq.com

Oracle伪列Level的使用

Oracle伪列Level的使用 LEVEL CONNECT 根据ID的数量按序展开现有表数据如下: 生成随机数据 转置截取字符串...
  • u012132482
  • u012132482
  • 2016年12月07日 09:46
  • 3426

oracle&nbsp;level关键字

level 和 connect by ,start with 合在一起,一般是用来实现递归(树)查询。 connect by 子句定义表中的数据是如何相互联系的  start with 子句定义树查询...
  • wxwpxh
  • wxwpxh
  • 2016年01月17日 16:56
  • 3483

syslog level

LogLevel 日志级别Description:Controls the verbosity of the ErrorLogSyntax:LogLevel levelDefault:LogLevel...
  • lingruoxuehan1202
  • lingruoxuehan1202
  • 2010年08月23日 16:39
  • 530

IDEA报错Target Level '1.6' Is Incompatible With Source Level '1.7'

在.idea目录中找到这个文件: 文件中找到下面这行: 将target的值修改为指定的编译器版本...
  • daiyan_csdn
  • daiyan_csdn
  • 2017年11月27日 11:05
  • 171

IntelliJ IDEA 之 jdk Language level

在java项目中必不可少的是我们要指定一个jdk。 在指定jdk的同时,还可以指定jdk的Language level,这个有点像我们工程最低支持版本。比如Language level 设置了5.0 ...
  • tiantiandjava
  • tiantiandjava
  • 2015年06月01日 16:03
  • 29764

深入理解connect by level<xxx

对于connect by,现在大多数人已经很熟悉了 connect by中的条件就表示了父子之间的连接关系 比如 connect by id=prior  pid 但如果connect by中的条件...
  • haiross
  • haiross
  • 2013年12月26日 17:27
  • 15243

level set介绍2(基本原理,基本思想)

2.2 水平集的定义说到水平集就应该首先明白什么是水平集。水平集的标准定义是[8]:与实数c对应的可微函数 R ." type="#_x0000_t75">的水平集是实点集 {(x1, x2, ......
  • limax_2004
  • limax_2004
  • 2008年12月28日 11:37
  • 10938

ORACLE层次查询学习 level connect by

 层次查询的概念 语法格式: select [level], column, expr... from table   [where condition]   start with co...
  • mjj291268154
  • mjj291268154
  • 2015年03月19日 20:44
  • 2767

ORACLE不常用但实用的技巧- 树查询 level用法

树查询 使用树查询的前提条件是: 在一条记录中记录了当前节点的ID和这个节点的父ID。 注意:一旦数据中出现了循环记录,如两个节点互为对方的父结点,系统就会报 ORA-01436错误(ORA-0143...
  • wangxy799
  • wangxy799
  • 2016年03月04日 17:20
  • 5151

oracle connect by level 的用法

connect by level  是oracle中一组关键字,是用来实现递归查询的,譬如说实现查询 1,2,3,4 .....n 的数字可以使用connect by level   SQ...
  • u012251421
  • u012251421
  • 2014年12月30日 20:07
  • 6832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA-122-TREE ON THE LEVEL
举报原因:
原因补充:

(最多只允许输入30个字)