zoukankan      html  css  js  c++  java
  • 判断是否是完全二叉树

    H: CBT?

    Time Limit: 1 s      Memory Limit: 128 MB     
     

    Problem Description

    对于二叉树,如果这棵树的节点排布是按行从上到下,每行从左到右挨个放置,中间不会有空闲的节点。则我们称之为完全二叉树。

    注:这棵树的根节点的值一定是1

    Input

    输入数字正整数n (1n20

    接下来n行,每行为两个数字(a,b)和一个字符c(L 或者 R),如果字符c是L,则表示b是a的左子节点;如果字符c是R,则表示b是a的右子节点。 (1a,b3000

    )

    Output

    判断这棵树是否为完全二叉树,如果是则输出Yes,否则输出No

    Sample Input

    5
    1 2 L
    1 3 R
    2 4 L
    2 5 R
    3 6 L
    

    Sample Output

    Yes

    Hint

    样例解释:样例所描述的二叉树结构如下

    很显然这是一个完全二叉树。

    是完全二叉树的几种情况:

    (1)、只有根节点

    (2)、每一个节点都有左右节点或者是有左节点但没有右节点

    #include<iostream>
    #include<string.h>
    #include<queue>
    #include<stdio.h>
    using namespace std;
    struct p
    {
      int num;
      int l;
      int r;
    }p[2000];
    int main()
    {
      int n,a,b;
      char s;
      cin>>n;
      for(int i=1;i<=n+1;i++)//有n条描述,但是有n+1个节点
      {
        p[i].l=0;
        p[i].r=0;
      }
      for(int i=0;i<n;i++)
      {
        cin>>a>>b>>s;
        if(s=='L')
          p[a].l=b;
        else
          p[a].r=b;
        p[a].num=a;
      }
      int cnt=0;
      for(int i=1;i<=n+1;i++)
      {
        if(p[i].l!=0&&p[i].r!=0)
          {
            cnt++;
            continue;
          }
          if(p[i].l!=0&&p[i].r==0)
          {
            cnt++;
            continue;
          }
          if(p[i].l==0&&p[i].r==0)
          {
            cnt++;
            continue;
          }
      }
      if(cnt==n+1)
        cout<<"Yes"<<endl;
      else
        cout<<"No"<<endl;
      return 0;
    
    }
  • 相关阅读:
    Editor HYSBZ
    MooFest POJ
    Monkey King HDU
    Haruna’s Breakfast HYSBZ
    数颜色 HYSBZ
    Mato的文件管理 HYSBZ
    小Z的袜子(hose) HYSBZ
    javascript类的简单定义
    json格式
    javascript call apply
  • 原文地址:https://www.cnblogs.com/-citywall123/p/10067408.html
Copyright © 2011-2022 走看看