UVa 122 树的层次遍历
题意:
给定一颗树, 按层次遍历输出。

分析:
用数组模拟二叉树, bfs即可实现层次遍历
#include <bits/stdc++.h>
using namespace std;
struct Node{
bool have_value;
int v, left, right;
void reset(){//用于再次初始化节点
init();
}
void init(){
have_value = ;
v = left = right = ;
}
Node():have_value(false), v(),left(), right(){init();}//构造函数
};
const int maxn = ;
Node tree[maxn];
const int root = ;
int cnt, failed;
char s[maxn];
void newtree(){
cnt = ;
tree[root].reset();
}
void addnode(int v, char* s){ int len = strlen(s) - ;
int u = root;
for(int i = ; i < len; i++){
if(s[i] == 'L'){
if(tree[u].left == )
{
tree[u].left = ++cnt;
tree[cnt].reset();
u = cnt;
}
else { u = tree[u].left;};
}
else if(s[i] == 'R'){
if(tree[u].right == ){
tree[u].right = ++cnt;
tree[cnt].reset();
u = cnt;
}
else u = tree[u].right;
}
}
if(tree[u].have_value) failed = true;
tree[u].v = v;
tree[u].have_value = true;
}
bool input(){
newtree();
failed = false;
for(;;){
if(scanf("%s",s) != ) return false;
if(!strcmp(s,"()")) break;
int v;
sscanf(&s[],"%d",&v);
addnode(v,strchr(s,',')+);//将逗号后的字符串传递
}
return true;
}
bool bfs(vector<int>& ans){//引用传递
queue<int> q;
q.push(root);
while(!q.empty()){
int u = q.front();
q.pop();
if(tree[u].have_value == )
return false;
ans.push_back(tree[u].v);
if(tree[u].left != ){
q.push(tree[u].left);
}
if(tree[u].right != ){
q.push(tree[u].right);
}
}
return true;
}
int main(){ while(input()){
vector<int> ans;
if(!bfs(ans) || failed)
printf("not complete\n");
else {
cout <<ans[];
int alen = ans.size();
for(int i = ; i < alen; i++){
cout << " " << ans[i];
}
puts("");
}
}
return ;
}
UVa 122 树的层次遍历的更多相关文章
- Uva 122 树的层次遍历 Trees on the level lrj白书 p149
是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担 ...
- Trees on the level UVA - 122 (二叉树的层次遍历)
题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...
- UVa 122 (二叉树的层次遍历) Trees on the level
题意: 输入一颗二叉树,按照(左右左右, 节点的值)的格式.然后从上到下从左到右依次输出各个节点的值,如果一个节点没有赋值或者多次赋值,则输出“not complete” 一.指针方式实现二叉树 首先 ...
- 树的层次遍历(Trees on the level,UVA 122)
题目描述: 题目思路: 1.用结构链表来建树 2.用队列来实现层次遍历,当遍历到根节点时,将其子节点压入队列 #include <iostream> #include <cstdli ...
- 编程练习:实现树的层次遍历 (CVTE笔试)
直接层次遍历是比较简单的,但是题目要求的分层打印,这就变得稍微有些麻烦 我是采用两个队列的方法实现. 1.将树结构入队列1. 2.当队列1和队列2都不为空的时候,则一直循环. 3.当队列1不为空的时候 ...
- 6_7 树的层次遍历(UVa122)<二叉树的动态创建与BFS>
树状结构在计算机科学的许多领域中都相当重要.本问题牵涉到建立树及走访树.给你一二叉树,你的任务是写一个程序来打印依「阶层(level-order)」走访的结果.在本问题中,二叉树的每个节点含有一个正整 ...
- 6-7 树的层次遍历 uva122
非常不熟练 照着书大的 晚上尝试一下自己打 了解二叉树 用数组打 第一次: #include<bits/stdc++.h> using namespace std; bool fai ...
- UVa 122 Trees on the level(链式二叉树的建立和层次遍历)
题目链接: https://cn.vjudge.net/problem/UVA-122 /* 问题 给出每个节点的权值和路线,输出该二叉树的层次遍历序列. 解题思路 根据输入构建链式二叉树,再用广度优 ...
- UVA - 122 Trees on the level (二叉树的层次遍历)
题意:给定结点值和从根结点到该结点的路径,若根到某个叶结点路径上有的结点输入中未给出或给出超过一次,则not complete,否则层次遍历输出所有结点. 分析:先建树,建树的过程中,沿途结点都申请了 ...
随机推荐
- 用WEKA进行数据挖掘
学习于IBM教学文档 数据挖掘学习与weka使用 第二部 分分类和集群 分类 vs. 群集 vs. 最近邻 在我深入探讨每种方法的细节并通过 WEKA 使用它们之前,我想我们应该先理解每个模型 - 每 ...
- Python 学习之Virtualenv
Virtualenv是一个python环境的隔离工具,主要解决库的隔离和权限问题 Refer:中文版Virtualevn解释 用virtualenv创建多个python环境 我们360如何使用pyth ...
- ava的动态代理机制详解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- VUE学习,is 特性,转载来源:https://segmentfault.com/q/1010000007205176/
- linux下php开启pdo扩展
前提:网页报错 为解决问题:Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' 解决方案 : 下载安装PHP_MYSQL扩展 wget http:// ...
- log级别
trace<debug<info<warn<error<fatal trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没 ...
- JVM最多能创建多少个线程: unable to create new native thread
转载自:http://www.rigongyizu.com/jvm-max-threads/ 有应用报出这样的异常“java.lang.OutOfMemoryError: unable to crea ...
- (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示
http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...
- pil - pillow 的版本
pip install PIL python2版本 pip install pillow python3版本
- 认识单文件组件.vue 文件
vuejs 自定义了一种.vue文件,可以把html, css, js 写到一个文件中,从而实现了对一个组件的封装, 一个.vue 文件就是一个单独的组件.由于.vue文件是自定义的,浏览器不认识,所 ...