您的位置:首页 > 其它

二叉排序树

2015-07-27 18:56 309 查看

二叉排序树


Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树

输入

开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)

输出

示例输入

2
123456789
987654321
432156789
0


示例输出

NO
NO

#include<bits/stdc++.h>

using namespace std;

int j;

typedef struct node
{
char a;
node *l,*r;
}*tree;

tree creat(tree t,char k)
{
if (t==NULL)
{
t=new node;
t->l=NULL;
t->r=NULL;
t->a=k;
}
else
{
if (t->a>k)
t->l=creat(t->l,k);
else
t->r=creat(t->r,k);
}
return t;
}

void xianxu(tree t,char *q)
{
if (t)
{
q[j++]=t->a;
xianxu(t->l,q);
xianxu(t->r,q);
}
}

int main()
{
int n,i;
char q1[100],q2[100],q[100];
while (cin>>n,n!=0)
{
memset(q1,0,sizeof(q1));
cin>>q;
tree t=NULL;
for (i=0;i<strlen(q);i++)
{
t=creat(t,q[i]);
}
j=0;
xianxu(t,q1);
while (n--)
{
memset(q2,0,sizeof(q2));
cin>>q;
tree t1=NULL;
for (i=0;i<strlen(q);i++)
{
t1=creat(t1,q[i]);
}
j=0;
xianxu(t1,q2);
if (strcmp(q1,q2)==0)
cout<<"YES\n";
else
cout<<"NO\n";
}
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: