//问题 C : 算法9-5~9-8:二叉排序树的基本操作
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int key;
struct node *LChild,*RChild;
}BSTNode,*BSTree;
void CreatBST(BSTree *bst,int n); //创建
BSTree SearchBST(BSTree bst,int key) ; //查找
void InsertBST(BSTree *bst,int key) ; //插入
BSTNode * DelBST(BSTree t,int k) ; //删除
void print_bst(BSTree t) //输出
{
if (!t)
{
print_bst(t->LChild);
printf("\t%d\t", t->key);
print_bst(t->RChild);
}
}
/*Creat new tree*/
void CreatBST(BSTree *bst,int n)
{
int i;
int key;
*bst=NULL;
for(i=1;i<=n;i++)
{
scanf("%d",&key);
InsertBST(bst,key);
}
//return bst;
}
/*Search*/
BSTree SearchBST(BSTree bst,int key)
{
if(!bst) //空树
return NULL;
else
if(bst->key==key) //找到则返回
return bst;
else
if(key <bst->key) //小于当前值
return SearchBST(bst->LChild, key); //搜索左子树
else
return SearchBST(bst->RChild, key);
}
/*Insert*/
void InsertBST(BSTree *bst,int key)
{
BSTree t;
if(*bst==NULL) //空树,创建
{
t=(BSTree)malloc(sizeof(BSTNode));
t->key=key;
t->LChild=NULL;
t->RChild=NULL;
*bst=t;
}
else
if(key <(*bst)->key) //小于当前值
InsertBST(&((*bst)->LChild),key); //插入到左子树
else
if(key>(*bst)->key)
InsertBST(&(*bst)->RChild,key);
}
/*Delet*/
BSTNode *DelBST(BSTree t,int k)
{
BSTNode *p,*f,*s,*q;
p=t;
f=NULL;
while(p)
{
if(p->key==k) //先找到删除元素在树中的位置,遍历根,左子,右子
break;
f=p;
if(p->key>k)
p=p->LChild;
else
p=p->RChild;
}
if(p==NULL) //没有左右子树
return t;
if(p->LChild==NULL) //左子树为空
{
if(f==NULL)
t=p->RChild;
else
if(f->LChild==p)
f->LChild=p->RChild;
else
f->RChild=p->LChild;
free(p);
}
else //右子树为空
{
q=p;
s=s->LChild;
while(s->RChild)
{
q=s;
s=s->RChild;
}
if(q==p)
q->LChild=s->LChild;
else
q->RChild=s->LChild;
p->key=s->key;
free(s);
}
return t;
}
/*Main*/
int
main()
{
BSTNode *root;
int data,n,k;
scanf("%d",&n);
scanf("%d",&k);
CreatBST(&root,n);
for(int j=0;j<k;j++)
{
scanf("%d",&data);
if(SearchBST(root,data)==NULL)
printf("0 ");
else printf("1 ");;
//if(root!=NULL)
// printf("%d ",root->key);
// else printf("0 ");
// //print_bst(root);
}
}
/**************************************************************
Problem: 2169
User: admin
Language: C
Result: Accepted
Time:11 ms
Memory:1144 kb
****************************************************************/