hdu 1622 Trees on the level

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1622 
小白书上的题。。。

 

 1 #include<algorithm>

 2 #include<iostream>

 3 #include<cstdlib>

 4 #include<cstdio>

 5 #include<vector>

 6 #include<queue>

 7 using std::queue;

 8 using std::vector;

 9 const int Max_N = 260;

10 struct Node {

11     int v, vis;

12     Node *ch[2];

13     inline void set(int _v, Node *p) {

14         vis = 0, v = _v;

15         ch[0] = ch[1] = p;

16     }

17 };

18 struct BinTree {

19     int fail;

20     char buf[Max_N];

21     Node *tail, *root, stack[Max_N];

22     void init() {

23         fail = 0;

24         tail = &stack[0];

25     }

26     inline Node *newNode(int v = 0) {

27         Node *p = tail++;

28         p->set(v, NULL);

29         return p;

30     }

31     inline void insert(const char *src, const int v) {

32         int n = strlen(src);

33         Node *x = root;

34         for (int i = 0; i < n; i++) {

35             if (src[i] == 'L') {

36                 if (!x->ch[0]) x->ch[0] = newNode();

37                 x = x->ch[0];

38             } else if (src[i] == 'R') {

39                 if (!x->ch[1]) x->ch[1] = newNode();

40                 x = x->ch[1];

41             }

42         }

43         if (x->vis) fail = 1;

44         x->v = v;

45         x->vis = 1;

46     }

47     inline void bfs() {

48         vector<int> ans;

49         queue<Node *> que;

50         que.push(root);

51         while (!que.empty()) {

52             Node *u = que.front(); que.pop();

53             if (!u->vis) {

54                 fail = 1;

55                 break;

56             }

57             ans.push_back(u->v);

58             if (u->ch[0]) que.push(u->ch[0]);

59             if (u->ch[1]) que.push(u->ch[1]);

60         }

61         if (fail) {

62             puts("not complete");

63             return;

64         }

65         int n = ans.size();

66         for (int i = 0; i < n; i++) {

67             printf("%d%c", ans[i], i < n - 1 ? ' ' : '\n');

68         }

69     }

70     inline int gogo() {

71         init();

72         int v = 0;

73         root = newNode();

74         for (;;) {

75             if (scanf("%s", buf) != 1) return 0;

76             if (!strcmp(buf, "()")) break;

77             sscanf(&buf[1], "%d", &v);

78             insert(strchr(buf, ',') + 1, v);

79         }

80         bfs();

81         return 1;

82     }

83 }tree;

84 int main() {

85 #ifdef LOCAL

86     freopen("in.txt", "r", stdin);

87     freopen("out.txt", "w+", stdout);

88 #endif

89     while (tree.gogo());

90     return 0;

91 }
View Code

 

你可能感兴趣的:(level)