二叉搜索树
首先二叉排序树也是一棵二叉树,所谓二叉树,就是“任何节点最多只允许两个子节点”,这两个子节点称为左右子节点。如下便是一个二叉树。
1、二叉排序树性质:
1、就是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2、若它的右子树不空,则右子树上所有节点的值均大于其根节点的值。
3、换句话说就是:任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值。
如下便是一颗二叉排序树:
eg:https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2563/pid/3373
#include<bits/stdc++.h>
using namespace std;
typedef struct tree
{
int data;
tree *lc,*rc;
}*bitree;
void create(bitree &root,int n)
{
if(!root)
{
root=new tree;
root->data=n;
root->lc=root->rc=NULL;
}
else
{
if(n>root->data)
create(root->rc,n);
else
create(root->lc,n);
}
}
int compare(bitree &r1,bitree &r2)
{
if(!r1&&!r2)
return 1;
else if(r1&&r2)
{
if(r1->data==r2->data)
return (compare(r1->lc,r2->lc)&&compare(r1->rc,r2->rc));
}
return 0;
}
int main()
{
int m,t,k,n,f;
while(cin>>m>>t)
{
if(m==0)
break;
bitree root=NULL;
k=m;
while(k--)
{
cin>>n;
create(root,n);
}
while(t--)
{
bitree r=NULL;
k=m;
while(k--)
{
cin>>n;
create(r,n);
}
if(compare(root,r))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;