UVA122二叉树BFS广搜入门
2016-03-02 20:19
453 查看
1)AC代码
2)WA代码,只改了最后的判断条件,有什么情况漏掉了!!??
3)
Trees on the level
Submit Status
Description
to many algorithms in computer graphics.
This problem involves building and traversing binary trees.
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 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 becompletely specified if every node on all root-to-node paths in the tree is given a value exactly once.
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.
or a node is given a value more than once, then the string ``not complete'' should be printed.
#include <iostream> #include <string.h> #include <bits/stdc++.h> #include <queue> #include <vector> using namespace std; const int maxn=3000; char str[maxn]; bool failed; vector <int> ans; struct Node{ Node *left,*right; int v; bool have_valued; Node():have_valued(false),left(NULL),right(NULL){}//构造函数使结构体内成员初始化 }; Node* root;//????? *,根节点需要单独先定义,建立树时定义一个节点等于根节点然后往下走同时将空的根节点进行了赋值,遍历树时也是从根节点让下走。 Node* newnode()//将new申请内存空间,封装到函数里,该函数返回一个指向Node类型的指针 { return new Node(); } void addnode(int num,string s) { int len=s.length(); Node *u=root;//建立一个u,用u往下走 for(int i=0;i<len-1;i++){ if(s[i]=='L'){ if(u->left==NULL) u->left=newnode(); u=u->left;//用u往下走 } else if(s[i]=='R'){ if(u->right==NULL) u->right=newnode(); u=u->right; } } if(u->have_valued){ failed=true; } u->have_valued=true; u->v=num; } bool input() { //memset(str,0,sizeof(str)); failed=false; root=newnode(); while(1){ if(scanf("%s",str)!=1) return 0;//返回0是不是一样 if(!strcmp(str,"()")) break; int num; sscanf(&str[1],"%d",&num);//这里注意格式不要写错 //if(!addnode(num,strchr(str,',')+1)) return 2;!!注意,添加节点失败并不意味马上结束跳出? addnode(num,strchr(str,',')+1); } return 1; } bool bfs() { queue <Node*> q; ans.clear(); q.push(root); while(!q.empty()){ Node* u=q.front();q.pop(); if(!u->have_valued) return 0;//缺节点 ans.push_back(u->v); if(u->left!=NULL) //if(u->left->have_valued)??? q.push(u->left); if(u->right!=NULL) q.push(u->right); } return 1; } void pri_out() { for(int i=0;i<ans.size();i++){ if(i) cout<<" "; cout<<ans[i]; } cout<<endl; } int main() { while(input()){ int j=bfs(); if(failed||!j){//前者是创建树时出错,后者是输出编号出错 cout<<"not complete"<<endl; } else{ pri_out(); } } return 0; }
2)WA代码,只改了最后的判断条件,有什么情况漏掉了!!??
#include <iostream> #include <string.h> #include <queue> #include <vector> #include <bits/stdc++.h> using namespace std; const int maxn=3000; char str[maxn]; bool failed; vector <int> ans; struct Node{ Node *left,*right; int v; bool have_valued; Node():have_valued(false),left(NULL),right(NULL){}//构造函数使结构体内成员初始化 }; Node* root;//????? *,根节点需要单独先定义,建立树时定义一个节点等于根节点然后往下走同时将空的根节点进行了赋值,遍历树时也是从根节点让下走。 Node* newnode()//将new申请内存空间,封装到函数里,该函数返回一个指向Node类型的指针 { return new Node(); } bool addnode(int num,string s) { int len=s.length(); Node *u=root;//建立一个u,用u往下走 for(int i=0;i<len-1;i++){ if(s[i]=='L'){ if(u->left==NULL) u->left=newnode(); u=u->left;//用u往下走 } else if(s[i]=='R'){ if(u->right==NULL) u->right=newnode(); u=u->right; } } if(u->have_valued){ failed=true; return 0; } u->have_valued=true; u->v=num; return 1; } int input() { //memset(str,0,sizeof(str)); failed=false; root=newnode(); while(1){ if(scanf("%s",str)!=1) return 0;//返回0是不是一样 if(!strcmp(str,"()")) break; int num; sscanf(&str[1],"%d",&num);//这里注意格式不要写错 //if(!addnode(num,strchr(str,',')+1)) return 2;!!注意,添加节点失败并不意味马上结束跳出? if(!addnode(num,strchr(str,',')+1)) return 2; } return 1; } bool bfs() { queue <Node*> q; ans.clear(); q.push(root); while(!q.empty()){ Node* u=q.front();q.pop(); if(!u->have_valued) return 0; ans.push_back(u->v); if(u->left!=NULL) //if(u->left->have_valued)??? q.push(u->left); if(u->right!=NULL) q.push(u->right); } return 1; } void pri_out() { for(int i=0;i<ans.size();i++){ if(i) cout<<" "; cout<<ans[i]; } cout<<endl; } int main() { while(1){ int k=input(); if(k==0) break; int j=bfs(); if(k==2||!j){//前者是创建树时出错,后者是输出编号出错 cout<<"not complete"<<endl; } else{ pri_out(); } } return 0; }
3)
Trees on the level
Time Limit: 3000MS | Memory Limit: Unknown | 64bit IO Format: %lld & %llu |
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 fundamentalto 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 havehave 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 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 becompletely 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 eachtree 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 valueor 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
相关文章推荐
- 【解决方法】iOS 开发小技巧
- poj2723 Get Luffy Out 2011-12-26
- Open Replicator
- 我不知道的
- ngCordova插件之InAppBrowser插件的使用
- 消息队列之JMS和AMQP对比
- 2.redis基础开发
- android布局属性详解
- poj3683 Priest John's Busiest Day 2011-12-26
- USACO:1.5.3 Superprime Rib 特殊的质数肋骨
- Android开发笔记----安卓手机端抓包
- 蓝桥杯六6加法变乘法
- 假设编程语言是女人
- Android 网络通信框架Volley简介(Google IO 2013)
- zabbix_直接使用80端口根目录访问
- Android基于回调的事件处理
- 用kaptcha生成验证码
- poj3207 Ikki's Story IV - Panda's Trick 2011-12-26
- poj3678 Katu Puzzle 2011-12-26
- hdu不要62