http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1186

来源:互联网 发布:知乎 图标资源 编辑:程序博客网 时间:2024/06/10 12:45
  • 问题描述
  • It's an easy problem. I will give you a binary tree. You just need to tell me the width of the binary tree.
    The width of a binary tree means the maximum number of nodes in a same level.


    For example, the width of binary tree above is 3.

  • 输入
  • The first line is an integer T, means the number of cases.
    Then follow T cases.
    For each case, the first line is an integer N, means the number of nodes. (1 <= N <= 10)
    Then follow N lines. Each line contains 3 integers P A B; indicate the number of this node and its two children node. If the node doesn’t have left child or right child, then replace it by -1.
    You can assume the root is 1.
  • 输出
  • For each case, output the width.
  • 样例输入
  • 164 -1 -12 4 55 -1 -11 2 36 -1 -13 -1 6
  • 样例输出
  • 3
    AC代码:
    #include<iostream>#include<string.h>#include<string>#include<algorithm>#include<cstdio>#define N 20using namespace std;typedef struct {int to;int next;}Node;Node s[3*N];int lev[N];int head[N];int res;void init(){res=0;memset(lev,0,sizeof(lev));memset(head,-1,sizeof(head)); }void add(int a,int b){s[res].to=b;s[res].next=head[a];head[a]=res++;}void dfs(int cur,int now){ lev[cur]++; if(head[now]==-1) return; for(int i=head[now];i!=-1;i=s[i].next)  dfs(cur+1,s[i].to);}int main(){int T;    scanf("%d",&T);while(T--){int n;init();scanf("%d",&n);for(int i=0;i!=n;++i){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(b!=-1) add(a,b);if(c!=-1) add(a,c);}dfs(0,1);printf("%d\n",*max_element(lev,lev+n));}return 0;}


原创粉丝点击