zoukankan      html  css  js  c++  java
  • 1004. Counting Leaves

    题目信息:

    题目的意思是找出树中每一层的叶节点个数。
    个人觉得难点在寻找每一层有哪些结点,或者说每一个结点在哪一层。题主的做法是用一个队列来帮助我们记录每一个叶节点的层数。
    需要注意的是,输入的数据可能是乱序的,也就是头一列可能不是叶节点的,这个也是一个难点。

    /* 题目:1004    */
    /* 作者:ChanWunsam  */
    /* 时间:2017.12.19  */
    #include <cstdio>
    #include <queue>
    #include <vector>
    #include <map>
    #include <string>
    #include <iostream>
    #include <cmath>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    struct TNode{
      int childNum;
      int height;
      int *child;
    };
    struct TNode FMTree[101];
    
    int main()
    {
      int N, M, ID, childNum, childID, i, j, queue[101], front, rear, cnt[100], H, MaxH;
      cin>>N>>M;
      
      /* 初始化家庭树 */
      for(i=0; i<=N; i++)
      {
        FMTree[i].childNum=0;
        FMTree[i].height=0;
        cnt[i]=0;
      }
      
      /* 输入数据 */
      for(i=0; i<M; i++)
      {
        cin>>ID;
        cin>>childNum;
        FMTree[ID].childNum=childNum;
        //cout<<"ID:"<<ID<<" "<<FMTree[ID].height<<endl;
        
        FMTree[ID].child=(int *)malloc(childNum * sizeof(int));
        for(j=0; j<childNum; j++)
        {
          cin>>childID;
          FMTree[ID].child[j]=childID;
        }
      }
      
      /* 建立树层 */
      front=rear=0;
      queue[rear++]=1;      /* 根节点,很重要 */
      while(rear-front)
      {
        ID=queue[front++];
        for(i=0; i<FMTree[ID].childNum; i++)
        {
          j=FMTree[ID].child[i];
          queue[rear++]=j;
          FMTree[j].height=FMTree[ID].height+1; 
        }
      }
      
      /* 寻找无子树结点 */
      H=MaxH=0;
      for(i=1; i<=N; i++)
      {
        H=FMTree[i].height;
        if(!FMTree[i].childNum)
          cnt[H]++;
        if(H>MaxH)
          MaxH=H;
      }
      
      /* 输出值 */
      cout<<cnt[0];
      for(i=1; i<=MaxH; i++)
        cout<<" "<<cnt[i];
      
        return 0;
    }
    

    虽然时间复杂度依旧被暴捶,但是好在这算是题主真正意义上独立解决的一个问题(不过中间卡在了乱序的那个地方去寻找思路了),而且思路也和大佬们差不多。还是有点小满足的。


    上星期欠的债算是补了一部分了。。。。

  • 相关阅读:
    安装node配置环境变量,解决某组件(如cordova,webpack等)“不是内部命令”问题
    用js控制css属性
    用javascript动态改变网页文字大小
    在无代码文件的aspx文件中添加类、函数和字段的方法
    HBase-0.98.3 如何调整RPC连接的数量
    double类型相等判断 [转]
    Virtual Memory Usage from Java under Linux [转]
    手工释放SWAP空间的方法[转]
    maven配置 指定jdk版本
    maven配置: 生成war的同时生成jar, 并在其他artifact配置依赖于这个jar
  • 原文地址:https://www.cnblogs.com/ChanWunsam/p/10018215.html
Copyright © 2011-2022 走看看