Uva 122 Trees on the level
2017-04-13 21:55
411 查看
大意: 给出二叉树,求层次遍历,第一次试着用数组模拟指针建树。
#include <algorithm> #include <cstring> #include <cstdio> #include <iostream> #include <sstream> #include <queue> using namespace std; #define maxn 2005 struct btnode { int v; int right,left; btnode(int a,int b = -1,int c = -1) { v = a ; right = b; left = c; } btnode(){} }b[maxn]; int flag = 1; int num = 1; int datanum = 0; int add(int va,int lorr,int now) { b[num] = btnode(va); if(lorr == 0) b[now].left = num; else b[now].right = num; num++; return 0; } int getdata() { string s; for(int i = 0; i < maxn ; i++) b[i] = btnode(0); num = 1; datanum = 0; flag = 1; for(; ;) { if(!(cin >> s)) return 0; if(s == "()") break; else { datanum++; int anum; string astr = s.substr(s.find('(')+1,s.find(',') - s.find('(')-1); string bstr = s.substr(s.find(',')+1, s.find(')')-s.find(',')-1); stringstream ss; ss << astr; ss >> anum; if(bstr == "" && b[0].v == 0) b[0].v = anum; else if(bstr == "" && b[0].v != 0) flag = 0; else if(bstr != "") { int k = 0; for(int i = 0; i < bstr.size()-1; i++) { if(bstr[i] == 'L') { if(b[k].left == -1) {add(0,0,k); k = num-1;} else k = b[k].left; } else { if(b[k].right == -1) { add(0,1,k); k = num-1;} else k = b[k].right; } } if(bstr[bstr.size()-1] == 'L') { int lnum = b[k].left; if(lnum != -1 ) { if(b[lnum].v != 0) flag = 0; else b[lnum].v = anum; } else add(anum,0,k); } else { int rnum = b[k].right; if(rnum != -1 ) { if(b[rnum].v != 0) flag = 0; else b[rnum].v = anum; } else add(anum,1,k); } } } } return 1; } int ans[3000]; int anum = 0; int bfs() { anum = 0; queue<int> q; q.push(0); if(b[0].v == 0) return 0; while(!q.empty()) { int x = q.front(); q.pop(); int t = b[x].v; ans[anum++] = t; if(b[x].left != -1 && b[b[x].left].v != 0) q.push(b[x].left); if(b[x].right != -1 && b[b[x].right].v != 0) q.push(b[x].right); } } int main() { //freopen("D://in.txt","r",stdin); for(;;) { if(getdata() == 1) { if(flag == 0) printf("not complete\n"); else { bfs(); if(anum != datanum) printf("not complete\n"); else for(int i = 0; i < anum; i++) i == anum-1?printf("%d\n",ans[i]) : printf("%d ",ans[i]); } } else break; } return 0; }
相关文章推荐
- UVa 122 - Trees on the level
- UVA - 122 Trees on the level Map
- UVa 122 - Trees on the level
- UVA122 trees on the level(BFS)
- UVa 122 (二叉树的层次遍历) Trees on the level
- Uva 122 Trees on the level
- uva 122 - Trees on the level
- UVA122 Trees on the level【二叉树】【BFS】
- Uva - 122 - Trees on the level
- UVA - 122 Trees on the level
- UVa 122 - Trees on the level【二叉树初接触(BFS)】
- 例题6-7 UVA 122 - Trees on the level 树的层次遍历
- UVa 122 - Trees on the level
- UVA 122 - Trees on the level
- uva 122 Trees on the level
- uva 122 - Trees on the level(一棵看着书都写不利索的树……)
- UVA - 122 Trees on the level
- uva122 trees on the level
- uva122 Trees on the level(锻炼指针建一棵二叉树)
- Uva - 122 - Trees on the level