04-树4 是否同一棵二叉搜索树 (25分)

来源:互联网 发布:淘宝标题关键词优化 编辑:程序博客网 时间:2024/06/11 10:10
04-树4 是否同一棵二叉搜索树   (25分)

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。

输入格式:

输入包含若干组测试数据。每组数据的第1行给出两个正整数NN (\le 1010)和LL,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出NN个以空格分隔的正整数,作为初始插入序列。最后LL行,每行给出NN个插入的元素,属于LL个需要检查的序列。

简单起见,我们保证每个插入序列都是1到NN的一个排列。当读到NN为0时,标志输入结束,这组数据不要处理。

输出格式:

对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。

输入样例:

4 23 1 4 23 4 1 23 2 4 12 12 11 20

输出样例:

YesNoNo
#include <iostream>#include <string.h>#include <string>#define N 10///1852-2030using namespace std;int nodeIst(int  node[N+1][2],int num){    int i,t,pt,head=-1;    cin>>head;   // memset(node,-1,sizeof(node));   ///与主函数中的sizeof(node)不等!!!!    for (i=1; i<num; i++)    {        cin>>t;        pt=head;        while(pt!=-1)        {            if (t<pt)            {                if (node[pt][0]==-1)                {                    node[pt][0]=t;                    break;                }                else                {                    pt=node[pt][0];                }            }            else            {                if (node[pt][1]==-1)                {                    node[pt][1]=t;                    break;                }                else                {                    pt=node[pt][1];                }            }        }    }}int nodeCmp(int node[][2],int test[][2],int num){    int i=0;    for (i=1; i<=num; i++)    {        if ((node[i][0]!=test[i][0])||(node[i][1]!=test[i][1]))        {            return -1;        }    }    return 0;}int main(){    int node[N+1][2];    int test[N+1][2];    int n,l,j,y;    string outCome;    while(1)    {        cin>>n;        if (n==0)        {            break;        }        cin>>l;        memset(node,-1,sizeof(node));        nodeIst(node,n);        for (j=0; j<l; j++)        {            memset(test,-1,sizeof(test));            nodeIst(test,n);            outCome = (nodeCmp(node,test,n)==0)?"Yes":"No";            cout<<outCome<<endl;        }    }    return 0;}

0 0