UVA 122 Trees on the level 二叉树 广搜
题目链接: https://vjudge.net/problem/UVA-122
题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not complete"
解题思路: 这道题就是硬搞就可以了, 参考紫书去做的, 首先处理输入就是非常麻烦的事情, 用到了sscanf就会轻松很多, 看来C中还是有很多很多的好用的标准库函数可以拿来用的, 例如还有本题中的strchr() , 处理完输入, 然后就去构造数。 然后广搜一遍即可
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> #include <cstdio> #include <string> #include <vector> #include <cstring> #include <iterator> #include <cmath> #include <algorithm> #include <stack> #include <deque> #include <map> #include <set> #include <queue> #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 #define mem0(a) memset(a,0,sizeof(a)) #define sca(x) scanf("%d",&x) #define de printf("=======\n") typedef long long ll; using namespace std; struct node { bool yo; int value; node * l; node * r; node() { yo = false; value = 0; l = r = NULL; } }; node * root; bool failed; vector<int> ans; int cnt; node * new_node() { return new node(); } void addnode( int v, char * p ) { int n = (int)strlen(p); node * u = root; for( int i = 0; i < n; i++ ) { if( p[i] == 'L' ) { if( u->l == NULL ) u->l = new_node(); u = u->l; } else if( p[i] == 'R' ) { if( u->r == NULL ) u->r = new_node(); u = u->r; } } if( u->yo == true ) { failed = true; return; } u->value = v; u->yo = true; } bool readin() { char s[290]; while( 1 ) { if( scanf( "%s", s ) != 1 ) return false; if( strcmp(s, "()") == 0 ) break; int v; sscanf( &s[1], "%d", &v ); addnode( v, strchr(s, ',')+1 ); } return true; } bool bfs() { queue<node *> q; q.push(root); while( !q.empty() ) { node * temp = q.front(); q.pop(); if( temp->yo == false ) return 0; ans.push_back(temp->value); if( temp->l ) q.push(temp->l); if( temp->r ) q.push(temp->r); } return 1; } int main() { while(1) { cnt = 0; failed = 0; root = new_node(); ans.clear(); if( !readin() ) break; if( !failed && bfs() ) { int len = (int)ans.size(); for (int i = 0; i < len; i++) printf("%d%c", ans[i], i == len - 1 ? '\n' : ' '); } else { puts( "not complete" ); } } return 0; }
思考: 了解到一些很好用函数, 然后知道了每次对指针进行操作的时候都要判空, 我觉得数据结构和数学两大块儿真的是具重要, 原本打算打完今年的区域赛就退役了,但是为了学习各种的数据结构和数学, 我还是得继续打下去啊.....刷题还是不能断啊老哥, 然后我是真的想进橘子娱乐啊........我他妈是真的想进啊, 和我实在是太适合了, 然后现在就是非常非常非常难熬了.......
posted on 2017-09-08 21:49 FriskyPuppy 阅读(178) 评论(0) 编辑 收藏 举报