zoukankan      html  css  js  c++  java
  • UVa 11234 Expressions

      先构建一个表达式树,构建方式:从右向左读字符串,如果该字符是大写字母,则构建右子树,接着构建左子树,用递归进行实现。接着层次遍历该树,把得到的结果逆序输出。

      代码如下:

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <queue>
     5 #include <cctype>
     6 using namespace std;
     7 
     8 const int maxn = 10000+10;
     9 
    10 struct Node
    11 {
    12     char value;
    13     Node *left, *right;
    14 };
    15 
    16 Node * newnode()
    17 {
    18     Node * u = (Node *)malloc(sizeof(Node));
    19     if(u != NULL)
    20     {
    21         u->value = '\0';
    22         u->left = u->right = NULL;
    23     }
    24     return u;
    25 }
    26 
    27 int len, cur;
    28 char s[maxn];
    29 
    30 void build(Node * p)
    31 {
    32     if(cur < 0)   return;
    33     p->value = s[cur--];
    34     if(isupper(p->value))
    35     {
    36         if(p->right == NULL)   p->right = newnode();
    37         build(p->right);
    38         if(p->left == NULL)   p->left = newnode();
    39         build(p->left);
    40     }
    41 }
    42     
    43 void remove_tree(Node * u)
    44 {
    45     if(u)   return;
    46     remove_tree(u->left);
    47     remove_tree(u->right);
    48     free(u);
    49 }
    50 
    51 Node * root;
    52 
    53 char ans[maxn];
    54 void traversal(Node * root)
    55 {
    56     queue<Node *> q;
    57     q.push(root);
    58     int n = 0;
    59     while(!q.empty())
    60     {
    61         Node * u = q.front();
    62         ans[n++] = u->value;
    63         q.pop();
    64         if(u->left)   q.push(u->left);
    65         if(u->right)   q.push(u->right);
    66     }
    67 }
    68 
    69 int main()
    70 {
    71 #ifdef LOCAL    
    72     freopen("in", "r", stdin);
    73 #endif
    74     int T;
    75     scanf("%d", &T);
    76     while(T--)
    77     {
    78         scanf("%s", s);
    79         len = strlen(s);
    80         cur = len - 1;
    81         root = newnode();
    82         build(root);
    83         traversal(root);
    84         remove_tree(root);
    85         for(int i = len-1; i >= 0; i--)
    86             printf("%c", ans[i]);
    87         printf("\n");
    88     }
    89     return 0;
    90 }

      代码中试着用了queue,不小心忘写using namespace std了,编译出错那个纠结啊...

  • 相关阅读:
    【小强升职记】读书笔记
    MySQL HA 方案 MMM、MHA、MGR、PXC 对比
    【新机必备】
    【LeetCode】剑指 Offer 03. 数组中重复的数字
    生成表索引的创建和删除语句
    iptables 屏蔽端口
    mysql-5.6.20主从同步错误之Error_code: 1062 Duplicate entry '1' for key 'PRIMARY', Error_code: 1062
    OpenFeign和Consul爱恨交织的两天
    Docker:Linux离线安装docker-compose
    MySql:mysql命令行导入导出sql文件
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3040679.html
Copyright © 2011-2022 走看看