判断完全二叉树(顺序存储)ZKNUOJ

Description

假如对二叉树T和具有相同高度的满二叉树编号,如果T与满二叉树相同编号的节点位置相同,那么称二叉树T是一棵完全二叉树。现在根据边的连接情况判断一棵树是否是完全二叉树。

Input

输入分两部分:
第一部分:一个整数T,代表测试组数
第二部分:接下来有T组数据,每组的第一行有2个整数n(0 < n < 1024)和r(1<=r<=n), 表示结点数和树根,接下来n-1行每行有2个整数a,b (1 <= a,b <= n)表示a结点和b结点有一条边相连,如果a是b的根结点,则b是a的左子结点,如果b是a的根结点,则a是b的右子结点(数据保证是一棵树而不是一座森林)

Output

对于每组测试,如果对应的是完全二叉树 输出yes 否则输出no

Sample Input

2
5 1
1 2
3 1
4 2
2 5
5 1
1 2
3 1
4 2
3 5

Sample Output

yes
no

顺序存储

#include<stdio.h>
int chazhao(int x,int y,int n,int a[],int *p);
int panduan(int a[],int n);
void Output(int a[],int n);
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,g;
        scanf("%d%d",&n,&g);
        int a[10000]={0};//初始化 
        a[1]=g;// 根节点进入数组 
        int x,y;
        int p=0,max=1;//max代表数组最大长度 
        for(int i=1;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            a[i];
            int flag=chazhao(x,y,max,a,&p);//查找x,y中那个为根 指针带回根的位置 
            if(flag)//返回1   代表x 是根 
            {
                a[p*2]=y;
                if(p*2>max)//更新最大长度 
                {
                    max=p*2;
                }
            }
            else
            {
                a[p*2+1]=x;
                if(p*2+1>max)//更新最大长度 
                {
                    max=p*2+1;
                }
            }
        }
        //Output(a,max);
        int o=panduan(a,max);//判断从a[1]到a[max]是否全为0 
        if(o==0)
        printf("no\n");
        if(o==1)
        printf("yes\n");
         
    }
}
int chazhao(int x,int y,int n,int a[],int *p)
{
    for(int i=1;i<=n;i++)
    {
        if(a[i]==x)
        {
            *p=i;
            return 1;
        }
        if(a[i]==y)
        {
            *p=i;
            return 0;
        }
    }
}
int panduan(int a[],int n)
{
    for(int i=1;i<=n;i++)
    {
        if(a[i]==0)
        return 0;
    }
    return 1;
}
void Output(int a[],int n)
{
    for(int i=1;i<=n;i++)
    {
        printf("%d",a[i]);
    }
    printf("\n");
}

猜你喜欢

转载自blog.csdn.net/holly_z_p_f/article/details/80198254