UVA122二叉树BFS广搜入门
来源:互联网 发布:37传奇霸业羽毛数据 编辑:程序博客网 时间:2024/05/17 09:30
1)AC代码
#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)
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 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 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 1not complete
- UVA122二叉树BFS广搜入门
- uva122 数组表示二叉树,bfs
- UVA122 Trees on the level【二叉树】【BFS】
- hdu1548(BFS广搜入门)
- UVA679 / UVA122 学习二叉树
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- uva122(二叉树建立,中序遍历)
- uva122--二叉树的层次遍历
- UVa122 二叉树的层次遍历
- UVa122二叉树的层次遍历
- 二叉树--uva122 结构体+指针解法
- 广搜遍历二叉树
- UVA122(BFS)
- Hrbust-1012-Catch That Cow(广搜BFS入门)
- bfs(广搜)
- G - BFS广搜
- 广搜模版BFS
- 蓝桥杯六6加法变乘法
- 【解决方法】iOS 开发小技巧(一)
- linux线程
- 内核裁剪,将自己写的驱动加入内核及按键驱动的代码(arm TQ2440)
- Android修改R文件包名程,以及批量修改导入R文件
- UVA122二叉树BFS广搜入门
- linux内存管理--slab
- PullToRefreshListView总结
- elasticsearch-dsl 2.0.0 介绍
- NYOJ 题目79 拦截导弹(dp)
- 假设编程语言是女人
- Android开发笔记----安卓手机端抓包
- ubutnu 14.04LTS 安装opencv2.4
- Android 网络通信框架Volley简介(Google IO 2013)