• uva536 二叉树重建ac


    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <map>
    using namespace std;
    map<long long, int> weight2count;
    char s[1<<25];
    int sum;
    
    void build()//不一定要递归建树, [ 的数量减去 ] 数量就是结点的深度
    {
     int len = strlen(s);
     int depth = 0;
     sum = 0;
     weight2count.clear();
     for (int i = 0;i < len;i++)
     {
      switch (s[i])
      {
      case '[':
       depth++;break;
      case ']':
       depth--;break;
      case ',':
       break;
      default:
      {
       long long w = s[i] - 48;//'0'
       int k;
       for (k = i + 1;s[k] >= '0'&&s[k] <= '9';k++)
       {
        w = w * 10 + s[k] - 48;
       }
       i = k - 1;
       sum++;weight2count[w << depth]++;//!以不同节点为基准若出现树的总质量相等,则以某个节点为基准另一个结点不需改变质量
      }
      }
     }
    }
     
     
    int main(void)
    {
     int n;
     scanf("%d", &n);
     while (n--)
     {
      scanf("%s", s);
      build();
      int max = 0;
      for (auto it = weight2count.begin();it != weight2count.end();it++)
       if (max < it->second)max = it->second;
      printf("%d
    ", sum-max);
     }
     return 0;
    }
  • 相关阅读:
    VSCode配置Python开发环境
    图像特征——边缘
    关于相机内参中的焦距fx和fy
    摄影变换和仿射变换
    为什么要引入齐次坐标
    链表一
    从小问题看懂链表
    类与对象
    排序一
    数组
  • 原文地址:https://www.cnblogs.com/schsb/p/7898790.html
Copyright © 2020-2023  润新知