判断两个序列能否组成同一个二叉排序树

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s1[25],s2[25];
int a[2010],b[2010];
void Btree(char s[],int c[])  //二叉排序树:或者是空树或者是:如果左子树不空,则左子树上的结点值均小于它的根结点的值;若它的右子树不空,则右子树上所有根结点的值均大于它的根结点的值,它的左右子树也的分别为二叉排序树
{
    for(int i=0;i<strlen(s);i++)
    {
        int k=s[i]-'0';
        for(int j=1;j<=2000;)
        {
            if(c[j]==-1)//第一次
            {
                c[j]=k;
                break;
            }
            else if(c[j]>k)
                j*=2;
            else
                j=j*2+1;
        }
    }
}
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        scanf("%s",s1);
        memset(a,-1,sizeof(a));
        Btree(s1,a);
        for(int i=0;i<n;i++)
        {
            int j;
            scanf("%s",s2);
            memset(b,-1,sizeof(b));
            Btree(s2,b);
            for(j=1;j<2000;j++)
                if(a[j]!=b[j])
                break;
            if(j==2000)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42371928/article/details/87945150